
#include <cmath>
#include "IERSConv2010.hpp"
#include "constants.hpp"
#include "ERPTideModel.hpp"
#include "Epoch.hpp"


using namespace std;


namespace gpstk
{

    double dsign(double A, double B)
    {
        return ((B)<0.0?-fabs(A):fabs(A));
    }


    void iauRz(double psi, Matrix<double>& r)
    {
       double s, c, a00, a01, a02, a10, a11, a12;

       s = std::sin(psi);
       c = std::cos(psi);

       a00 =   c*r(0,0) + s*r(1,0);
       a01 =   c*r(0,1) + s*r(1,1);
       a02 =   c*r(0,2) + s*r(1,2);
       a10 = - s*r(0,0) + c*r(1,0);
       a11 = - s*r(0,1) + c*r(1,1);
       a12 = - s*r(0,2) + c*r(1,2);

       r(0,0) = a00;
       r(0,1) = a01;
       r(0,2) = a02;
       r(1,0) = a10;
       r(1,1) = a11;
       r(1,2) = a12;

       return;
    }


    void iauRy(double theta, Matrix<double>& r)
    {
       double s, c, a00, a01, a02, a20, a21, a22;

       s = std::sin(theta);
       c = std::cos(theta);

       a00 = c*r(0,0) - s*r(2,0);
       a01 = c*r(0,1) - s*r(2,1);
       a02 = c*r(0,2) - s*r(2,2);
       a20 = s*r(0,0) + c*r(2,0);
       a21 = s*r(0,1) + c*r(2,1);
       a22 = s*r(0,2) + c*r(2,2);

       r(0,0) = a00;
       r(0,1) = a01;
       r(0,2) = a02;
       r(2,0) = a20;
       r(2,1) = a21;
       r(2,2) = a22;

       return;
    }


    void iauRx(double phi, Matrix<double>& r)
    {
       double s, c, a10, a11, a12, a20, a21, a22;

       s = std::sin(phi);
       c = std::cos(phi);

       a10 =   c*r(1,0) + s*r(2,0);
       a11 =   c*r(1,1) + s*r(2,1);
       a12 =   c*r(1,2) + s*r(2,2);
       a20 = - s*r(1,0) + c*r(2,0);
       a21 = - s*r(1,1) + c*r(2,1);
       a22 = - s*r(1,2) + c*r(2,2);

       r(1,0) = a10;
       r(1,1) = a11;
       r(1,2) = a12;
       r(2,0) = a20;
       r(2,1) = a21;
       r(2,2) = a22;

       return;
    }


    double iauAnp(double a)
    {
       double w;


       w = fmod(a, TWO_PI);
       if (w < 0) w += TWO_PI;

       return w;
    }


    double iauAnpm(double a)
    {
       double w;


       w = fmod(a, TWO_PI);
       if (fabs(w) >= PI) w -= dsign(TWO_PI, a);

       return w;
    }


    double iauFad03(double t)
    {
       double a;

    /* Mean elongation of the Moon from the Sun (IERS Conventions 2003). */
       a = fmod(          1072260.703692 +
                 t * ( 1602961601.2090 +
                 t * (        - 6.3706 +
                 t * (          0.006593 +
                 t * (        - 0.00003169 ) ) ) ), TURNAS ) * AS_TO_RAD;

       return a;
    }


    double iauFal03(double t)
    {
       double a;


    /* Mean anomaly of the Moon (IERS Conventions 2003). */
       a = fmod(           485868.249036  +
                 t * ( 1717915923.2178 +
                 t * (         31.8792 +
                 t * (          0.051635 +
                 t * (        - 0.00024470 ) ) ) ), TURNAS ) * AS_TO_RAD;

       return a;
    }


    double iauFalp03(double t)
    {
       double a;

    /* Mean anomaly of the Sun (IERS Conventions 2003). */
       a = fmod(         1287104.793048 +
                 t * ( 129596581.0481 +
                 t * (       - 0.5532 +
                 t * (         0.000136 +
                 t * (       - 0.00001149 ) ) ) ), TURNAS ) * AS_TO_RAD;

       return a;
    }


    double iauFaf03(double t)
    {
       double a;


    /* Mean longitude of the Moon minus that of the ascending node */
    /* (IERS Conventions 2003).                                    */
       a = fmod(           335779.526232 +
                 t * ( 1739527262.8478 +
                 t * (       - 12.7512 +
                 t * (        - 0.001037 +
                 t * (          0.00000417 ) ) ) ), TURNAS ) * AS_TO_RAD;

       return a;
    }


    double iauFaom03(double t)
    {
       double a;


    /* Mean longitude of the Moon's ascending node */
    /* (IERS Conventions 2003).                    */
       a = fmod(          450160.398036 +
                 t * ( - 6962890.5431 +
                 t * (         7.4722 +
                 t * (         0.007702 +
                 t * (       - 0.00005939 ) ) ) ), TURNAS ) * AS_TO_RAD;

       return a;
    }


    double iauFapa03(double t)
    {
       double a;


    /* General accumulated precession in longitude. */
       a = (0.024381750 + 0.00000538691 * t) * t;

       return a;
    }


    double iauFame03(double t)
    {
       double a;


    /* Mean longitude of Mercury (IERS Conventions 2003). */
       a = fmod(4.402608842 + 2608.7903141574 * t, TWO_PI);

       return a;
    }


    double iauFane03(double t)
    {
       double a;

    /* Mean longitude of Neptune (IERS Conventions 2003). */
       a = fmod(5.311886287 + 3.8133035638 * t, TWO_PI);

       return a;
    }


    double iauFave03(double t)
    {
       double a;


    /* Mean longitude of Venus (IERS Conventions 2003). */
       a = fmod(3.176146697 + 1021.3285546211 * t, TWO_PI);

       return a;
    }


    double iauFae03(double t)
    {
       double a;


    /* Mean longitude of Earth (IERS Conventions 2003). */
       a = fmod(1.753470314 + 628.3075849991 * t, TWO_PI);

       return a;
    }


    double iauFama03(double t)
    {
       double a;


    /* Mean longitude of Mars (IERS Conventions 2003). */
       a = fmod(6.203480913 + 334.0612426700 * t, TWO_PI);

       return a;
    }


    double iauFaju03(double t)
    {
       double a;


    /* Mean longitude of Jupiter (IERS Conventions 2003). */
       a = fmod(0.599546497 + 52.9690962641 * t, TWO_PI);

       return a;
    }


    double iauFasa03(double t)
    {
       double a;


    /* Mean longitude of Saturn (IERS Conventions 2003). */
       a = fmod(0.874016757 + 21.3299104960 * t, TWO_PI);

       return a;
    }


    double iauFaur03(double t)
    {
       double a;


    /* Mean longitude of Uranus (IERS Conventions 2003). */
       a = fmod(5.481293872 + 7.4781598567 * t, TWO_PI);

       return a;
    }



    void iauXy06(double date1, double date2, double *x, double *y)
    {

    /* Maximum power of T in the polynomials for X and Y */
       enum { MAXPT = 5 };

    /* Polynomial coefficients (arcsec, X then Y). */
       static const double xyp[2][MAXPT+1] = {

          {    -0.016617,
             2004.191898,
               -0.4297829,
               -0.19861834,
                0.000007578,
                0.0000059285
          },
          {    -0.006951,
               -0.025896,
              -22.4072747,
                0.00190059,
                0.001112526,
                0.0000001358
          }
       };

    /* Fundamental-argument multipliers:  luni-solar terms */
       static const int mfals[][5] = {

       /* 1-10 */
          {  0,   0,   0,   0,   1 },
          {  0,   0,   2,  -2,   2 },
          {  0,   0,   2,   0,   2 },
          {  0,   0,   0,   0,   2 },
          {  0,   1,   0,   0,   0 },
          {  0,   1,   2,  -2,   2 },
          {  1,   0,   0,   0,   0 },
          {  0,   0,   2,   0,   1 },
          {  1,   0,   2,   0,   2 },
          {  0,   1,  -2,   2,  -2 },

       /* 11-20 */
          {  0,   0,   2,  -2,   1 },
          {  1,   0,  -2,   0,  -2 },
          {  1,   0,   0,  -2,   0 },
          {  1,   0,   0,   0,   1 },
          {  1,   0,   0,   0,  -1 },
          {  1,   0,  -2,  -2,  -2 },
          {  1,   0,   2,   0,   1 },
          {  2,   0,  -2,   0,  -1 },
          {  0,   0,   0,   2,   0 },
          {  0,   0,   2,   2,   2 },

       /* 21-30 */
          {  2,   0,   0,  -2,   0 },
          {  0,   2,  -2,   2,  -2 },
          {  2,   0,   2,   0,   2 },
          {  1,   0,   2,  -2,   2 },
          {  1,   0,  -2,   0,  -1 },
          {  2,   0,   0,   0,   0 },
          {  0,   0,   2,   0,   0 },
          {  0,   1,   0,   0,   1 },
          {  1,   0,   0,  -2,  -1 },
          {  0,   2,   2,  -2,   2 },

       /* 31-40 */
          {  0,   0,   2,  -2,   0 },
          {  1,   0,   0,  -2,   1 },
          {  0,   1,   0,   0,  -1 },
          {  0,   2,   0,   0,   0 },
          {  1,   0,  -2,  -2,  -1 },
          {  1,   0,   2,   2,   2 },
          {  0,   1,   2,   0,   2 },
          {  2,   0,  -2,   0,   0 },
          {  0,   0,   2,   2,   1 },
          {  0,   1,  -2,   0,  -2 },

       /* 41-50 */
          {  0,   0,   0,   2,   1 },
          {  1,   0,   2,  -2,   1 },
          {  2,   0,   0,  -2,  -1 },
          {  2,   0,   2,  -2,   2 },
          {  2,   0,   2,   0,   1 },
          {  0,   0,   0,   2,  -1 },
          {  0,   1,  -2,   2,  -1 },
          {  1,   1,   0,  -2,   0 },
          {  2,   0,   0,  -2,   1 },
          {  1,   0,   0,   2,   0 },

       /* 51-60 */
          {  0,   1,   2,  -2,   1 },
          {  1,  -1,   0,   0,   0 },
          {  0,   1,  -1,   1,  -1 },
          {  2,   0,  -2,   0,  -2 },
          {  0,   1,   0,  -2,   0 },
          {  1,   0,   0,  -1,   0 },
          {  3,   0,   2,   0,   2 },
          {  0,   0,   0,   1,   0 },
          {  1,  -1,   2,   0,   2 },
          {  1,   1,  -2,  -2,  -2 },

       /* 61-70 */
          {  1,   0,  -2,   0,   0 },
          {  2,   0,   0,   0,  -1 },
          {  0,   1,  -2,  -2,  -2 },
          {  1,   1,   2,   0,   2 },
          {  2,   0,   0,   0,   1 },
          {  1,   1,   0,   0,   0 },
          {  1,   0,  -2,   2,  -1 },
          {  1,   0,   2,   0,   0 },
          {  1,  -1,   0,  -1,   0 },
          {  1,   0,   0,   0,   2 },

       /* 71-80 */
          {  1,   0,  -1,   0,  -1 },
          {  0,   0,   2,   1,   2 },
          {  1,   0,  -2,  -4,  -2 },
          {  1,  -1,   0,  -1,  -1 },
          {  1,   0,   2,   2,   1 },
          {  0,   2,  -2,   2,  -1 },
          {  1,   0,   0,   0,  -2 },
          {  2,   0,  -2,  -2,  -2 },
          {  1,   1,   2,  -2,   2 },
          {  2,   0,  -2,  -4,  -2 },

       /* 81-90 */
          {  1,   0,  -4,   0,  -2 },
          {  2,   0,   2,  -2,   1 },
          {  1,   0,   0,  -1,  -1 },
          {  2,   0,   2,   2,   2 },
          {  3,   0,   0,   0,   0 },
          {  1,   0,   0,   2,   1 },
          {  0,   0,   2,  -2,  -1 },
          {  3,   0,   2,  -2,   2 },
          {  0,   0,   4,  -2,   2 },
          {  1,   0,   0,  -4,   0 },

       /* 91-100 */
          {  0,   1,   2,   0,   1 },
          {  2,   0,   0,  -4,   0 },
          {  1,   1,   0,  -2,  -1 },
          {  2,   0,  -2,   0,   1 },
          {  0,   0,   2,   0,  -1 },
          {  0,   1,  -2,   0,  -1 },
          {  0,   1,   0,   0,   2 },
          {  0,   0,   2,  -1,   2 },
          {  0,   0,   2,   4,   2 },
          {  2,   1,   0,  -2,   0 },

       /* 101-110 */
          {  1,   1,   0,  -2,   1 },
          {  1,  -1,   0,  -2,   0 },
          {  1,  -1,   0,  -1,  -2 },
          {  1,  -1,   0,   0,   1 },
          {  0,   1,  -2,   2,   0 },
          {  0,   1,   0,   0,  -2 },
          {  1,  -1,   2,   2,   2 },
          {  1,   0,   0,   2,  -1 },
          {  1,  -1,  -2,  -2,  -2 },
          {  3,   0,   2,   0,   1 },

       /* 111-120 */
          {  0,   1,   2,   2,   2 },
          {  1,   0,   2,  -2,   0 },
          {  1,   1,  -2,  -2,  -1 },
          {  1,   0,   2,  -4,   1 },
          {  0,   1,  -2,  -2,  -1 },
          {  2,  -1,   2,   0,   2 },
          {  0,   0,   0,   2,   2 },
          {  1,  -1,   2,   0,   1 },
          {  1,  -1,  -2,   0,  -2 },
          {  0,   1,   0,   2,   0 },

       /* 121-130 */
          {  0,   1,   2,  -2,   0 },
          {  0,   0,   0,   1,   1 },
          {  1,   0,  -2,  -2,   0 },
          {  0,   3,   2,  -2,   2 },
          {  2,   1,   2,   0,   2 },
          {  1,   1,   0,   0,   1 },
          {  2,   0,   0,   2,   0 },
          {  1,   1,   2,   0,   1 },
          {  1,   0,   0,  -2,  -2 },
          {  1,   0,  -2,   2,   0 },

       /* 131-140 */
          {  1,   0,  -1,   0,  -2 },
          {  0,   1,   0,  -2,   1 },
          {  0,   1,   0,   1,   0 },
          {  0,   0,   0,   1,  -1 },
          {  1,   0,  -2,   2,  -2 },
          {  1,  -1,   0,   0,  -1 },
          {  0,   0,   0,   4,   0 },
          {  1,  -1,   0,   2,   0 },
          {  1,   0,   2,   1,   2 },
          {  1,   0,   2,  -1,   2 },

       /* 141-150 */
          {  0,   0,   2,   1,   1 },
          {  1,   0,   0,  -2,   2 },
          {  1,   0,  -2,   0,   1 },
          {  1,   0,  -2,  -4,  -1 },
          {  0,   0,   2,   2,   0 },
          {  1,   1,   2,  -2,   1 },
          {  1,   0,  -2,   1,  -1 },
          {  0,   0,   1,   0,   1 },
          {  2,   0,  -2,  -2,  -1 },
          {  4,   0,   2,   0,   2 },

       /* 151-160 */
          {  2,  -1,   0,   0,   0 },
          {  2,   1,   2,  -2,   2 },
          {  0,   1,   2,   1,   2 },
          {  1,   0,   4,  -2,   2 },
          {  1,   1,   0,   0,  -1 },
          {  2,   0,   2,   0,   0 },
          {  2,   0,  -2,  -4,  -1 },
          {  1,   0,  -1,   0,   0 },
          {  1,   0,   0,   1,   0 },
          {  0,   1,   0,   2,   1 },

       /* 161-170 */
          {  1,   0,  -4,   0,  -1 },
          {  1,   0,   0,  -4,  -1 },
          {  2,   0,   2,   2,   1 },
          {  2,   1,   0,   0,   0 },
          {  0,   0,   2,  -3,   2 },
          {  1,   2,   0,  -2,   0 },
          {  0,   3,   0,   0,   0 },
          {  0,   0,   4,   0,   2 },
          {  0,   0,   2,  -4,   1 },
          {  2,   0,   0,  -2,  -2 },

       /* 171-180 */
          {  1,   1,  -2,  -4,  -2 },
          {  0,   1,   0,  -2,  -1 },
          {  0,   0,   0,   4,   1 },
          {  3,   0,   2,  -2,   1 },
          {  1,   0,   2,   4,   2 },
          {  1,   1,  -2,   0,  -2 },
          {  0,   0,   4,  -2,   1 },
          {  2,  -2,   0,  -2,   0 },
          {  2,   1,   0,  -2,  -1 },
          {  0,   2,   0,  -2,   0 },

       /* 181-190 */
          {  1,   0,   0,  -1,   1 },
          {  1,   1,   2,   2,   2 },
          {  3,   0,   0,   0,  -1 },
          {  2,   0,   0,  -4,  -1 },
          {  3,   0,   2,   2,   2 },
          {  0,   0,   2,   4,   1 },
          {  0,   2,  -2,  -2,  -2 },
          {  1,  -1,   0,  -2,  -1 },
          {  0,   0,   2,  -1,   1 },
          {  2,   0,   0,   2,   1 },

       /* 191-200 */
          {  1,  -1,  -2,   2,  -1 },
          {  0,   0,   0,   2,  -2 },
          {  2,   0,   0,  -4,   1 },
          {  1,   0,   0,  -4,   1 },
          {  2,   0,   2,  -4,   1 },
          {  4,   0,   2,  -2,   2 },
          {  2,   1,  -2,   0,  -1 },
          {  2,   1,  -2,  -4,  -2 },
          {  3,   0,   0,  -4,   0 },
          {  1,  -1,   2,   2,   1 },

       /* 201-210 */
          {  1,  -1,  -2,   0,  -1 },
          {  0,   2,   0,   0,   1 },
          {  1,   2,  -2,  -2,  -2 },
          {  1,   1,   0,  -4,   0 },
          {  2,   0,   0,  -2,   2 },
          {  0,   2,   2,  -2,   1 },
          {  1,   0,   2,   0,  -1 },
          {  2,   1,   0,  -2,   1 },
          {  2,  -1,  -2,   0,  -1 },
          {  1,  -1,  -2,  -2,  -1 },

       /* 211-220 */
          {  0,   1,  -2,   1,  -2 },
          {  1,   0,  -4,   2,  -2 },
          {  0,   1,   2,   2,   1 },
          {  3,   0,   0,   0,   1 },
          {  2,  -1,   2,   2,   2 },
          {  0,   1,  -2,  -4,  -2 },
          {  1,   0,  -2,  -3,  -2 },
          {  2,   0,   0,   0,   2 },
          {  1,  -1,   0,  -2,  -2 },
          {  2,   0,  -2,   2,  -1 },

       /* 221-230 */
          {  0,   2,  -2,   0,  -2 },
          {  3,   0,  -2,   0,  -1 },
          {  2,  -1,   2,   0,   1 },
          {  1,   0,  -2,  -1,  -2 },
          {  0,   0,   2,   0,   3 },
          {  2,   0,  -4,   0,  -2 },
          {  2,   1,   0,  -4,   0 },
          {  1,   1,  -2,   1,  -1 },
          {  0,   2,   2,   0,   2 },
          {  1,  -1,   2,  -2,   2 },

       /* 231-240 */
          {  1,  -1,   0,  -2,   1 },
          {  2,   1,   2,   0,   1 },
          {  1,   0,   2,  -4,   2 },
          {  1,   1,  -2,   0,  -1 },
          {  1,   1,   0,   2,   0 },
          {  1,   0,   0,  -3,   0 },
          {  2,   0,   2,  -1,   2 },
          {  0,   2,   0,   0,  -1 },
          {  2,  -1,   0,  -2,   0 },
          {  4,   0,   0,   0,   0 },

       /* 241-250 */
          {  2,   1,  -2,  -2,  -2 },
          {  0,   2,  -2,   2,   0 },
          {  1,   0,   2,   1,   1 },
          {  1,   0,  -1,   0,  -3 },
          {  3,  -1,   2,   0,   2 },
          {  2,   0,   2,  -2,   0 },
          {  1,  -2,   0,   0,   0 },
          {  2,   0,   0,   0,  -2 },
          {  1,   0,   0,   4,   0 },
          {  0,   1,   0,   1,   1 },

       /* 251-260 */
          {  1,   0,   2,   2,   0 },
          {  0,   1,   0,   2,  -1 },
          {  0,   1,   0,   1,  -1 },
          {  0,   0,   2,  -2,   3 },
          {  3,   1,   2,   0,   2 },
          {  1,   1,   2,   1,   2 },
          {  1,   1,  -2,   2,  -1 },
          {  2,  -1,   2,  -2,   2 },
          {  1,  -2,   2,   0,   2 },
          {  1,   0,   2,  -4,   0 },

       /* 261-270 */
          {  0,   0,   1,   0,   0 },
          {  1,   0,   2,  -3,   1 },
          {  1,  -2,   0,  -2,   0 },
          {  2,   0,   0,   2,  -1 },
          {  1,   1,   2,  -4,   1 },
          {  4,   0,   2,   0,   1 },
          {  0,   1,   2,   1,   1 },
          {  1,   2,   2,  -2,   2 },
          {  2,   0,   2,   1,   2 },
          {  2,   1,   2,  -2,   1 },

       /* 271-280 */
          {  1,   0,   2,  -1,   1 },
          {  1,   0,   4,  -2,   1 },
          {  1,  -1,   2,  -2,   1 },
          {  0,   1,   0,  -4,   0 },
          {  3,   0,  -2,  -2,  -2 },
          {  0,   0,   4,  -4,   2 },
          {  2,   0,  -4,  -2,  -2 },
          {  2,  -2,   0,  -2,  -1 },
          {  1,   0,   2,  -2,  -1 },
          {  2,   0,  -2,  -6,  -2 },

       /* 281-290 */
          {  1,   0,  -2,   1,  -2 },
          {  1,   0,  -2,   2,   1 },
          {  1,  -1,   0,   2,  -1 },
          {  1,   0,  -2,   1,   0 },
          {  2,  -1,   0,  -2,   1 },
          {  1,  -1,   0,   2,   1 },
          {  2,   0,  -2,  -2,   0 },
          {  1,   0,   2,  -3,   2 },
          {  0,   0,   0,   4,  -1 },
          {  2,  -1,   0,   0,   1 },

       /* 291-300 */
          {  2,   0,   4,  -2,   2 },
          {  0,   0,   2,   3,   2 },
          {  0,   1,   4,  -2,   2 },
          {  0,   1,  -2,   2,   1 },
          {  1,   1,   0,   2,   1 },
          {  1,   0,   0,   4,   1 },
          {  0,   0,   4,   0,   1 },
          {  2,   0,   0,  -3,   0 },
          {  1,   0,   0,  -1,  -2 },
          {  1,  -2,  -2,  -2,  -2 },

       /* 301-310 */
          {  3,   0,   0,   2,   0 },
          {  2,   0,   2,  -4,   2 },
          {  1,   1,  -2,  -4,  -1 },
          {  1,   0,  -2,  -6,  -2 },
          {  2,  -1,   0,   0,  -1 },
          {  2,  -1,   0,   2,   0 },
          {  0,   1,   2,  -2,  -1 },
          {  1,   1,   0,   1,   0 },
          {  1,   2,   0,  -2,  -1 },
          {  1,   0,   0,   1,  -1 },

       /* 311-320 */
          {  0,   0,   1,   0,   2 },
          {  3,   1,   2,  -2,   2 },
          {  1,   0,  -4,  -2,  -2 },
          {  1,   0,   2,   4,   1 },
          {  1,  -2,   2,   2,   2 },
          {  1,  -1,  -2,  -4,  -2 },
          {  0,   0,   2,  -4,   2 },
          {  0,   0,   2,  -3,   1 },
          {  2,   1,  -2,   0,   0 },
          {  3,   0,  -2,  -2,  -1 },

       /* 321-330 */
          {  2,   0,   2,   4,   2 },
          {  0,   0,   0,   0,   3 },
          {  2,  -1,  -2,  -2,  -2 },
          {  2,   0,   0,  -1,   0 },
          {  3,   0,   2,  -4,   2 },
          {  2,   1,   2,   2,   2 },
          {  0,   0,   3,   0,   3 },
          {  1,   1,   2,   2,   1 },
          {  2,   1,   0,   0,  -1 },
          {  1,   2,   0,  -2,   1 },

       /* 331-340 */
          {  3,   0,   2,   2,   1 },
          {  1,  -1,  -2,   2,  -2 },
          {  1,   1,   0,  -1,   0 },
          {  1,   2,   0,   0,   0 },
          {  1,   0,   4,   0,   2 },
          {  1,  -1,   2,   4,   2 },
          {  2,   1,   0,   0,   1 },
          {  1,   0,   0,   2,   2 },
          {  1,  -1,  -2,   2,   0 },
          {  0,   2,  -2,  -2,  -1 },

       /* 341-350 */
          {  2,   0,  -2,   0,   2 },
          {  5,   0,   2,   0,   2 },
          {  3,   0,  -2,  -6,  -2 },
          {  1,  -1,   2,  -1,   2 },
          {  3,   0,   0,  -4,  -1 },
          {  1,   0,   0,   1,   1 },
          {  1,   0,  -4,   2,  -1 },
          {  0,   1,   2,  -4,   1 },
          {  1,   2,   2,   0,   2 },
          {  0,   1,   0,  -2,  -2 },

       /* 351-360 */
          {  0,   0,   2,  -1,   0 },
          {  1,   0,   1,   0,   1 },
          {  0,   2,   0,  -2,   1 },
          {  3,   0,   2,   0,   0 },
          {  1,   1,  -2,   1,   0 },
          {  2,   1,  -2,  -4,  -1 },
          {  3,  -1,   0,   0,   0 },
          {  2,  -1,  -2,   0,   0 },
          {  4,   0,   2,  -2,   1 },
          {  2,   0,  -2,   2,   0 },

       /* 361-370 */
          {  1,   1,   2,  -2,   0 },
          {  1,   0,  -2,   4,  -1 },
          {  1,   0,  -2,  -2,   1 },
          {  2,   0,   2,  -4,   0 },
          {  1,   1,   0,  -2,  -2 },
          {  1,   1,  -2,  -2,   0 },
          {  1,   0,   1,  -2,   1 },
          {  2,  -1,  -2,  -4,  -2 },
          {  3,   0,  -2,   0,  -2 },
          {  0,   1,  -2,  -2,   0 },

       /* 371-380 */
          {  3,   0,   0,  -2,  -1 },
          {  1,   0,  -2,  -3,  -1 },
          {  0,   1,   0,  -4,  -1 },
          {  1,  -2,   2,  -2,   1 },
          {  0,   1,  -2,   1,  -1 },
          {  1,  -1,   0,   0,   2 },
          {  2,   0,   0,   1,   0 },
          {  1,  -2,   0,   2,   0 },
          {  1,   2,  -2,  -2,  -1 },
          {  0,   0,   4,  -4,   1 },

       /* 381-390 */
          {  0,   1,   2,   4,   2 },
          {  0,   1,  -4,   2,  -2 },
          {  3,   0,  -2,   0,   0 },
          {  2,  -1,   2,   2,   1 },
          {  0,   1,  -2,  -4,  -1 },
          {  4,   0,   2,   2,   2 },
          {  2,   0,  -2,  -3,  -2 },
          {  2,   0,   0,  -6,   0 },
          {  1,   0,   2,   0,   3 },
          {  3,   1,   0,   0,   0 },

       /* 391-400 */
          {  3,   0,   0,  -4,   1 },
          {  1,  -1,   2,   0,   0 },
          {  1,  -1,   0,  -4,   0 },
          {  2,   0,  -2,   2,  -2 },
          {  1,   1,   0,  -2,   2 },
          {  4,   0,   0,  -2,   0 },
          {  2,   2,   0,  -2,   0 },
          {  0,   1,   2,   0,   0 },
          {  1,   1,   0,  -4,   1 },
          {  1,   0,   0,  -4,  -2 },

       /* 401-410 */
          {  0,   0,   0,   1,   2 },
          {  3,   0,   0,   2,   1 },
          {  1,   1,   0,  -4,  -1 },
          {  0,   0,   2,   2,  -1 },
          {  1,   1,   2,   0,   0 },
          {  1,  -1,   2,  -4,   1 },
          {  1,   1,   0,   0,   2 },
          {  0,   0,   2,   6,   2 },
          {  4,   0,  -2,  -2,  -1 },
          {  2,   1,   0,  -4,  -1 },

       /* 411-420 */
          {  0,   0,   0,   3,   1 },
          {  1,  -1,  -2,   0,   0 },
          {  0,   0,   2,   1,   0 },
          {  1,   0,   0,   2,  -2 },
          {  3,  -1,   2,   2,   2 },
          {  3,  -1,   2,  -2,   2 },
          {  1,   0,   0,  -1,   2 },
          {  1,  -2,   2,  -2,   2 },
          {  0,   1,   0,   2,   2 },
          {  0,   1,  -2,  -1,  -2 },

       /* 421-430 */
          {  1,   1,  -2,   0,   0 },
          {  0,   2,   2,  -2,   0 },
          {  3,  -1,  -2,  -1,  -2 },
          {  1,   0,   0,  -6,   0 },
          {  1,   0,  -2,  -4,   0 },
          {  2,   1,   0,  -4,   1 },
          {  2,   0,   2,   0,  -1 },
          {  2,   0,  -4,   0,  -1 },
          {  0,   0,   3,   0,   2 },
          {  2,   1,  -2,  -2,  -1 },

       /* 431-440 */
          {  1,  -2,   0,   0,   1 },
          {  2,  -1,   0,  -4,   0 },
          {  0,   0,   0,   3,   0 },
          {  5,   0,   2,  -2,   2 },
          {  1,   2,  -2,  -4,  -2 },
          {  1,   0,   4,  -4,   2 },
          {  0,   0,   4,  -1,   2 },
          {  3,   1,   0,  -4,   0 },
          {  3,   0,   0,  -6,   0 },
          {  2,   0,   0,   2,   2 },

       /* 441-450 */
          {  2,  -2,   2,   0,   2 },
          {  1,   0,   0,  -3,   1 },
          {  1,  -2,  -2,   0,  -2 },
          {  1,  -1,  -2,  -3,  -2 },
          {  0,   0,   2,  -2,  -2 },
          {  2,   0,  -2,  -4,   0 },
          {  1,   0,  -4,   0,   0 },
          {  0,   1,   0,  -1,   0 },
          {  4,   0,   0,   0,  -1 },
          {  3,   0,   2,  -1,   2 },

       /* 451-460 */
          {  3,  -1,   2,   0,   1 },
          {  2,   0,   2,  -1,   1 },
          {  1,   2,   2,  -2,   1 },
          {  1,   1,   0,   2,  -1 },
          {  0,   2,   2,   0,   1 },
          {  3,   1,   2,   0,   1 },
          {  1,   1,   2,   1,   1 },
          {  1,   1,   0,  -1,   1 },
          {  1,  -2,   0,  -2,  -1 },
          {  4,   0,   0,  -4,   0 },

       /* 461-470 */
          {  2,   1,   0,   2,   0 },
          {  1,  -1,   0,   4,   0 },
          {  0,   1,   0,  -2,   2 },
          {  0,   0,   2,   0,  -2 },
          {  1,   0,  -1,   0,   1 },
          {  3,   0,   2,  -2,   0 },
          {  2,   0,   2,   2,   0 },
          {  1,   2,   0,  -4,   0 },
          {  1,  -1,   0,  -3,   0 },
          {  0,   1,   0,   4,   0 },

       /* 471 - 480 */
          {  0,   1,  -2,   0,   0 },
          {  2,   2,   2,  -2,   2 },
          {  0,   0,   0,   1,  -2 },
          {  0,   2,  -2,   0,  -1 },
          {  4,   0,   2,  -4,   2 },
          {  2,   0,  -4,   2,  -2 },
          {  2,  -1,  -2,   0,  -2 },
          {  1,   1,   4,  -2,   2 },
          {  1,   1,   2,  -4,   2 },
          {  1,   0,   2,   3,   2 },

       /* 481-490 */
          {  1,   0,   0,   4,  -1 },
          {  0,   0,   0,   4,   2 },
          {  2,   0,   0,   4,   0 },
          {  1,   1,  -2,   2,   0 },
          {  2,   1,   2,   1,   2 },
          {  2,   1,   2,  -4,   1 },
          {  2,   0,   2,   1,   1 },
          {  2,   0,  -4,  -2,  -1 },
          {  2,   0,  -2,  -6,  -1 },
          {  2,  -1,   2,  -1,   2 },

       /* 491-500 */
          {  1,  -2,   2,   0,   1 },
          {  1,  -2,   0,  -2,   1 },
          {  1,  -1,   0,  -4,  -1 },
          {  0,   2,   2,   2,   2 },
          {  0,   2,  -2,  -4,  -2 },
          {  0,   1,   2,   3,   2 },
          {  0,   1,   0,  -4,   1 },
          {  3,   0,   0,  -2,   1 },
          {  2,   1,  -2,   0,   1 },
          {  2,   0,   4,  -2,   1 },

       /* 501-510 */
          {  2,   0,   0,  -3,  -1 },
          {  2,  -2,   0,  -2,   1 },
          {  2,  -1,   2,  -2,   1 },
          {  1,   0,   0,  -6,  -1 },
          {  1,  -2,   0,   0,  -1 },
          {  1,  -2,  -2,  -2,  -1 },
          {  0,   1,   4,  -2,   1 },
          {  0,   0,   2,   3,   1 },
          {  2,  -1,   0,  -1,   0 },
          {  1,   3,   0,  -2,   0 },

       /* 511-520 */
          {  0,   3,   0,  -2,   0 },
          {  2,  -2,   2,  -2,   2 },
          {  0,   0,   4,  -2,   0 },
          {  4,  -1,   2,   0,   2 },
          {  2,   2,  -2,  -4,  -2 },
          {  4,   1,   2,   0,   2 },
          {  4,  -1,  -2,  -2,  -2 },
          {  2,   1,   0,  -2,  -2 },
          {  2,   1,  -2,  -6,  -2 },
          {  2,   0,   0,  -1,   1 },

       /* 521-530 */
          {  2,  -1,  -2,   2,  -1 },
          {  1,   1,  -2,   2,  -2 },
          {  1,   1,  -2,  -3,  -2 },
          {  1,   0,   3,   0,   3 },
          {  1,   0,  -2,   1,   1 },
          {  1,   0,  -2,   0,   2 },
          {  1,  -1,   2,   1,   2 },
          {  1,  -1,   0,   0,  -2 },
          {  1,  -1,  -4,   2,  -2 },
          {  0,   3,  -2,  -2,  -2 },

       /* 531-540 */
          {  0,   1,   0,   4,   1 },
          {  0,   0,   4,   2,   2 },
          {  3,   0,  -2,  -2,   0 },
          {  2,  -2,   0,   0,   0 },
          {  1,   1,   2,  -4,   0 },
          {  1,   1,   0,  -3,   0 },
          {  1,   0,   2,  -3,   0 },
          {  1,  -1,   2,  -2,   0 },
          {  0,   2,   0,   2,   0 },
          {  0,   0,   2,   4,   0 },

       /* 541-550 */
          {  1,   0,   1,   0,   0 },
          {  3,   1,   2,  -2,   1 },
          {  3,   0,   4,  -2,   2 },
          {  3,   0,   2,   1,   2 },
          {  3,   0,   0,   2,  -1 },
          {  3,   0,   0,   0,   2 },
          {  3,   0,  -2,   2,  -1 },
          {  2,   0,   4,  -4,   2 },
          {  2,   0,   2,  -3,   2 },
          {  2,   0,   0,   4,   1 },

       /* 551-560 */
          {  2,   0,   0,  -3,   1 },
          {  2,   0,  -4,   2,  -1 },
          {  2,   0,  -2,  -2,   1 },
          {  2,  -2,   2,   2,   2 },
          {  2,  -2,   0,  -2,  -2 },
          {  2,  -1,   0,   2,   1 },
          {  2,  -1,   0,   2,  -1 },
          {  1,   1,   2,   4,   2 },
          {  1,   1,   0,   1,   1 },
          {  1,   1,   0,   1,  -1 },

       /* 561-570 */
          {  1,   1,  -2,  -6,  -2 },
          {  1,   0,   0,  -3,  -1 },
          {  1,   0,  -4,  -2,  -1 },
          {  1,   0,  -2,  -6,  -1 },
          {  1,  -2,   2,   2,   1 },
          {  1,  -2,  -2,   2,  -1 },
          {  1,  -1,  -2,  -4,  -1 },
          {  0,   2,   0,   0,   2 },
          {  0,   1,   2,  -4,   2 },
          {  0,   1,  -2,   4,  -1 },

       /* 571-580 */
          {  5,   0,   0,   0,   0 },
          {  3,   0,   0,  -3,   0 },
          {  2,   2,   0,  -4,   0 },
          {  1,  -1,   2,   2,   0 },
          {  0,   1,   0,   3,   0 },
          {  4,   0,  -2,   0,  -1 },
          {  3,   0,  -2,  -6,  -1 },
          {  3,   0,  -2,  -1,  -1 },
          {  2,   1,   2,   2,   1 },
          {  2,   1,   0,   2,   1 },

       /* 581-590 */
          {  2,   0,   2,   4,   1 },
          {  2,   0,   2,  -6,   1 },
          {  2,   0,   2,  -2,  -1 },
          {  2,   0,   0,  -6,  -1 },
          {  2,  -1,  -2,  -2,  -1 },
          {  1,   2,   2,   0,   1 },
          {  1,   2,   0,   0,   1 },
          {  1,   0,   4,   0,   1 },
          {  1,   0,   2,  -6,   1 },
          {  1,   0,   2,  -4,  -1 },

       /* 591-600 */
          {  1,   0,  -1,  -2,  -1 },
          {  1,  -1,   2,   4,   1 },
          {  1,  -1,   2,  -3,   1 },
          {  1,  -1,   0,   4,   1 },
          {  1,  -1,  -2,   1,  -1 },
          {  0,   1,   2,  -2,   3 },
          {  3,   0,   0,  -2,   0 },
          {  1,   0,   1,  -2,   0 },
          {  0,   2,   0,  -4,   0 },
          {  0,   0,   2,  -4,   0 },

       /* 601-610 */
          {  0,   0,   1,  -1,   0 },
          {  0,   0,   0,   6,   0 },
          {  0,   2,   0,   0,  -2 },
          {  0,   1,  -2,   2,  -3 },
          {  4,   0,   0,   2,   0 },
          {  3,   0,   0,  -1,   0 },
          {  3,  -1,   0,   2,   0 },
          {  2,   1,   0,   1,   0 },
          {  2,   1,   0,  -6,   0 },
          {  2,  -1,   2,   0,   0 },

       /* 611-620 */
          {  1,   0,   2,  -1,   0 },
          {  1,  -1,   0,   1,   0 },
          {  1,  -1,  -2,  -2,   0 },
          {  0,   1,   2,   2,   0 },
          {  0,   0,   2,  -3,   0 },
          {  2,   2,   0,  -2,  -1 },
          {  2,  -1,  -2,   0,   1 },
          {  1,   2,   2,  -4,   1 },
          {  0,   1,   4,  -4,   2 },
          {  0,   0,   0,   3,   2 },

       /* 621-630 */
          {  5,   0,   2,   0,   1 },
          {  4,   1,   2,  -2,   2 },
          {  4,   0,  -2,  -2,   0 },
          {  3,   1,   2,   2,   2 },
          {  3,   1,   0,  -2,   0 },
          {  3,   1,  -2,  -6,  -2 },
          {  3,   0,   0,   0,  -2 },
          {  3,   0,  -2,  -4,  -2 },
          {  3,  -1,   0,  -3,   0 },
          {  3,  -1,   0,  -2,   0 },

       /* 631-640 */
          {  2,   1,   2,   0,   0 },
          {  2,   1,   2,  -4,   2 },
          {  2,   1,   2,  -2,   0 },
          {  2,   1,   0,  -3,   0 },
          {  2,   1,  -2,   0,  -2 },
          {  2,   0,   0,  -4,   2 },
          {  2,   0,   0,  -4,  -2 },
          {  2,   0,  -2,  -5,  -2 },
          {  2,  -1,   2,   4,   2 },
          {  2,  -1,   0,  -2,   2 },

       /* 641-650 */
          {  1,   3,  -2,  -2,  -2 },
          {  1,   1,   0,   0,  -2 },
          {  1,   1,   0,  -6,   0 },
          {  1,   1,  -2,   1,  -2 },
          {  1,   1,  -2,  -1,  -2 },
          {  1,   0,   2,   1,   0 },
          {  1,   0,   0,   3,   0 },
          {  1,   0,   0,  -4,   2 },
          {  1,   0,  -2,   4,  -2 },
          {  1,  -2,   0,  -1,   0 },

       /* 651-NFLS */
          {  0,   1,  -4,   2,  -1 },
          {  1,   0,  -2,   0,  -3 },
          {  0,   0,   4,  -4,   4 }
       };

    /* Number of frequencies:  luni-solar */
       static const int NFLS = (int) (sizeof mfals / sizeof (int) / 5);

    /* Fundamental-argument multipliers:  planetary terms */
       static const int mfapl[][14] = {

       /* 1-10 */
          {  0,  0,  1, -1,  1,  0,  0, -1,  0, -2,  5,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  1, -1,  1,  0, -8, 12,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  8,-16,  4,  5,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0, -1,  2,  0,  0,  0,  0,  0 },

       /* 11-20 */
          {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  2, -5,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  3,  0, -1,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -8,  3,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  6, -8,  3,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0,  0 },

       /* 21-30 */
          {  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  1,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  1, -1,  1,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2, -1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  1 },
          {  2,  0,  0, -2,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },

       /* 31-40 */
          {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  1 },
          {  2,  0,  0, -2,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0, -1,  0,  0,  0 },

       /* 41-50 */
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  1, -1,  0,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  4,  0, -2,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  2, -1,  0,  0,  0,  0,  0,  2 },
          {  1,  0,  0,  0,  0,  0,-18, 16,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  1,  0,  0,  0,  2 },

       /* 51-60 */
          {  0,  0,  1, -1,  1,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0,  0,  0,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  0,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0, -1,  0,  0,  0,  2 },
          {  1,  0,  2,  0,  2,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  1 },
          {  1,  0, -2,  0, -2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  2,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0, -3,  3,  0,  0,  0,  0,  0,  0 },

       /* 61-70 */
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  8,-16,  4,  5,  0,  0, -2 },
          {  0,  0,  1, -1,  1,  0,  0,  3, -8,  3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  8,-11,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  8,-16,  4,  5,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0 },

       /* 71-80 */
          {  0,  0,  0,  0,  0,  0,  6, -8,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  3, -2,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  3,  0, -2,  0,  0,  0,  2 },
          {  0,  0,  1, -1,  1,  0,  0, -5,  8, -3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  2,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -2,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0,  0 },

       /* 81-90 */
          {  2,  0,  0, -2,  1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0, -1 },
          {  2,  0,  0, -2,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  8,-13,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0,  0,  0, -2,  5,  0,  0,  0 },
          {  1,  0,  0, -1,  0,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  2 },
          {  1,  0,  0,  0, -1,  0,-18, 16,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0,  0,  0,  2, -5,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0,  0,  0,  1,  0,  0,  0,  0 },

       /* 91-100 */
          {  1,  0,  0, -2,  0,  0, 19,-21,  3,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0, -8, 13,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  1,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  7, -9,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  2 },
          {  1,  0,  0,  0,  1,  0,-18, 16,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  6,-16,  4,  5,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  3, -7,  0,  0,  0,  0,  0, -2 },

       /* 101-110 */
          {  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  1 },
          {  2,  0,  0, -2,  1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2, -1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  2,  0,  0,  0,  2 },

       /* 111-120 */
          {  0,  0,  0,  0,  1,  0,  0,  1, -2,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  2 },
          {  0,  0,  2, -2,  1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0, -3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
          {  2,  0,  0, -2,  0,  0, -6,  8,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -2,  2,  0,  0,  0,  0,  0 },

       /* 121-130 */
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  1 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -1,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  8,-10,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  1, -1,  1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0, -2 },
          {  1,  0,  0, -1,  1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },

       /* 131-140 */
          {  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  4,  0, -3,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  1,  0,  2, -3,  0,  0,  0,  0,  0,  0 },

       /* 141-150 */
          {  1,  0,  0, -1,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -4,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  9,-11,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0, -4,  5,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  4,  0, -1,  0,  0,  0,  2 },

       /* 151-160 */
          {  1,  0,  0, -1,  1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1,  1,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0, -4, 10,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0, -1,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0, -2 },
          {  0,  0,  2, -2,  1,  0, -4,  4,  0,  0,  0,  0,  0,  0 },

       /* 161-170 */
          {  0,  0,  0,  0,  0,  0,  0,  3,  0,  0, -1,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -3,  0,  0,  0,  0,  2 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0,  0,  2,  0 },
          {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  1,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0, -9, 13,  0,  0,  0,  0,  0 },
          {  2,  0,  2,  0,  2,  0,  0,  2,  0, -3,  0,  0,  0,  0 },

       /* 171-180 */
          {  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  1, -1,  2,  0,  0, -1,  0,  0,  2,  0,  0,  0 },
          {  1,  0,  0, -1, -1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  1 },
          {  1,  0,  2,  0,  1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
          {  1,  0, -2,  0, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0, -2,  4,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0 },

       /* 181-190 */
          {  0,  0,  0,  0,  0,  0,  2,  1,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  2,  0,  2,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1, -8,  3,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  7, -8,  3,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  1,  0, -3,  5,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0, -1,  0,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  0,  0,  0,  1 },

       /* 191-200 */
          {  0,  0,  0,  0,  0,  0,  0,  2,  0, -1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  7,-10,  0,  0,  0,  0,  0, -2 },
          {  1,  0,  0, -2,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  2, -5,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  6, -8,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  1, -1,  1,  0,  0, -9, 15,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0, -2,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0 },

       /* 201-210 */
          {  0,  0,  0,  0,  0,  0,  0,  1, -4,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -1,  0,  0,  2 },
          {  2,  0,  0, -2,  1,  0, -6,  8,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  1, -1,  1,  0,  3, -6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  8,-14,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },

       /* 211-220 */
          {  0,  0,  0,  0,  1,  0,  0,  8,-15,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  7, -7,  0,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2,  1,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  1,  0,  0,  2 },
          {  2,  0, -1, -1,  0,  0,  0,  3, -7,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -3,  4,  0,  0,  0,  0,  0 },

       /* 221-230 */
          {  2,  0,  0, -2,  0,  0,  0, -6,  8,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2,  0,  0,  0, -5,  6,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0,  0,  0, -1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  2,  1,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  1,  2,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  1,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3, -9,  4,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0, -2 },

       /* 231-240 */
          {  0,  0,  0,  0,  0,  0,  0,  2,  0, -4,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  1 },
          {  0,  0,  0,  0,  0,  0,  7,-11,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  3, -5,  4,  0,  0,  0,  0,  2 },
          {  0,  0,  1, -1,  0,  0,  0, -1,  0, -1,  1,  0,  0,  0 },
          {  2,  0,  0,  0,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0, -2 },
          {  0,  0,  1, -1,  2,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  0, -1 },

       /* 241-250 */
          {  0,  0,  1, -1,  1,  0,  0, -1,  0, -1,  1,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -8,  3,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  2, -4,  0, -3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  3, -5,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3,  0, -3,  0,  0,  0,  2 },
          {  0,  0,  2, -2,  2,  0, -8, 11,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -8,  3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -2,  0,  0,  0 },

       /* 251-260 */
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  1,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  7, -9,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  2, -1,  0,  0,  0,  0,  0,  0 },
          {  1,  0, -2, -2, -2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  5,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0,  1 },

       /* 261-270 */
          {  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  2, -5,  0,  0,  2 },
          {  2,  0,  0, -2, -1,  0,  0, -2,  0,  0,  5,  0,  0,  0 },
          {  2,  0,  0, -2, -1,  0, -6,  8,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0, -2,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  8, -8,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3,  0,  2, -5,  0,  0,  2 },
          {  0,  0,  0,  0,  1,  0,  3, -7,  4,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },

       /* 271-280 */
          {  0,  0,  1, -1,  0,  0,  0, -1,  0, -2,  5,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3,  0, -3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0, 11,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  6,-15,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  3,  0,  1,  0,  0,  0,  2 },
          {  1,  0,  0, -1,  0,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0, -3,  7, -4,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  5,  0, -2,  0,  0,  0,  2 },

       /* 281-290 */
          {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  2, -2,  2,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -8,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  6,-11,  0,  0,  0,  0, -2 },

       /* 291-300 */
          {  0,  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0, -2 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  3,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  9,-12,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  1, -1,  0,  0, -8, 12,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0, -2,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  7, -7,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0, -1 },

       /* 301-310 */
          {  0,  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  1, -1,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  1, -1, -1,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1, -5,  0,  0,  0,  0, -2 },
          {  2,  0,  0, -2,  0,  0,  0, -2,  0,  3, -1,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -2,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0,  2 },

       /* 311-320 */
          {  0,  0,  0,  0,  0,  0,  9, -9,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  3,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0,  2, -4,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  5, -3,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  1 },
          {  0,  0,  1, -1,  2,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -3,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  2 },
          {  0,  0,  2,  0,  2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },

       /* 321-330 */
          {  0,  0,  2,  0,  2,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  5,  0, -3,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0 },
          {  2,  0, -1, -1, -1,  0,  0, -1,  0,  3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  4, -3,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  5,-10,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  2, -2,  1, -1,  0,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0,  2,  0,  0 },

       /* 331-340 */
          {  0,  0,  0,  0,  1,  0,  3, -5,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0, -2,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  9, -9,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2,  0,  2,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0, -8, 11,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0, -2,  0,  0,  2,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0, -1,  2,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  2, -6,  0,  0,  0,  0,  0, -2 },

       /* 341-350 */
          {  0,  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -2,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  7,-13,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  3,  0, -2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  3,  0,  0,  0,  2 },
          {  0,  0,  2, -2,  1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  8, -8,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  8,-10,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  0,  1 },

       /* 351-360 */
          {  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0, -4,  0,  0,  0,  0 },
          {  2,  0,  0, -2, -1,  0,  0, -5,  6,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0,  0, -2 },
          {  2,  0, -1, -1, -1,  0,  0,  3, -7,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0 },
          {  0,  0,  2,  0,  2,  0, -1,  1,  0,  0,  0,  0,  0,  0 },

       /* 361-370 */
          {  2,  0,  0, -2,  0,  0,  0, -2,  0,  4, -3,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  6,-11,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2,  1,  0,  0, -6,  8,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -8,  1,  5,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  6, -5,  0,  0,  0,  0,  2 },
          {  1,  0, -2, -2, -2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  2,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  2,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  1 },

       /* 371-380 */
          {  0,  0,  0,  0,  0,  0,  0,  6, -7,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  4,  0,  0, -2,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  3,  0,  0, -2,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  0,  1, -6,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  3, -5,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  7,-13,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  0,  0,  0,  2 },

       /* 381-390 */
          {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0,  2,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0, -8, 15,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2, -2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
          {  2,  0, -1, -1, -1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
          {  1,  0,  2, -2,  2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  1,  0, -1,  1, -1,  0,-18, 17,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2,  0,  2,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
          {  0,  0,  2,  0,  2,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
          {  0,  0,  2, -2, -1,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  2,  0,  0, -1,  0,  1,  0,  0,  0,  0 },

       /* 391-400 */
          {  0,  0,  0,  0,  1,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  8,-16,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2 },
          {  0,  0,  0,  0,  2,  0,  0, -1,  2,  0,  0,  0,  0,  0 },
          {  2,  0, -1, -1, -2,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0, -2,  4,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  2,  0,  0,  0,  0,  2 },
          {  2,  0,  0, -2, -1,  0,  0, -2,  0,  4, -5,  0,  0,  0 },

       /* 401-410 */
          {  2,  0,  0, -2, -1,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
          {  2,  0, -1, -1, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0, -1, -1,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
          {  1,  0, -1, -1, -1,  0, 20,-20,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  1, -2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0, -2,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  5, -8,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0,  0,  0,  0, -1,  0,  0,  0 },

       /* 411-420 */
          {  0,  0,  0,  0,  0,  0,  9,-11,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  5, -3,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  6, -7,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -2,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0, -2,  0,  0,  0 },
          {  0,  0,  1, -1,  2,  0,  0, -1,  0, -2,  5,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0 },

       /* 421-430 */
          {  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -6,  0,  0,  0,  0, -2 },
          {  1,  0,  0, -2,  0,  0, 20,-21,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  8,-12,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  2,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  8,-12,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  9,-17,  0,  0,  0,  0,  0 },

       /* 431-440 */
          {  0,  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -8,  1,  5,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -7,  0,  0,  0,  0, -2 },
          {  1,  0,  0, -1,  1,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
          {  1,  0, -2,  0, -2,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0, -9, 17,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  1, -4,  0,  0,  0,  0,  0, -2 },
          {  1,  0, -2, -2, -2,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
          {  1,  0, -1,  1, -1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },

       /* 441-450 */
          {  0,  0,  2, -2,  2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  2,  0,  0, -1,  0,  0,  1,  0,  0,  0 },
          {  0,  0,  1, -1,  2,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0,  2, -2,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  5,-10,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  4,  0, -4,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0, -5,  0,  0,  0, -2 },

       /* 451-460 */
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -5,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -2,  5,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -2,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0,  1 },
          {  1,  0,  0, -2,  0,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3, -7,  4,  0,  0,  0,  0,  0 },
          {  2,  0,  2,  0,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1, -1,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0,  1,  0, -2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0, -2 },

       /* 461-470 */
          {  1,  0,  0, -1,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0, -3,  0,  3,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0, -5,  5,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  1, -3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -4,  6,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0, -1,  0,  0 },
          {  0,  0,  1, -1,  1,  0, -5,  6,  0,  0,  0,  0,  0,  0 },

       /* 471-480 */
          {  0,  0,  0,  0,  1,  0,  3, -4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  7,-10,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  3, -8,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  7, -9,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  7, -8,  0,  0,  0,  0,  2 },

       /* 481-490 */
          {  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -8,  3,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -2,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0, -1 },
          {  2,  0,  0, -2, -1,  0,  0, -6,  8,  0,  0,  0,  0,  0 },
          {  2,  0, -1, -1,  1,  0,  0,  3, -7,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0, -7,  9,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0, -1 },

       /* 491-500 */
          {  0,  0,  1, -1,  2,  0, -8, 12,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0,  0,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  1,  0,  0, -2,  0,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  7, -8,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2,  1,  0,  0, -5,  6,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2, -1,  0,  0, -2,  0,  3, -1,  0,  0,  0 },
          {  1,  0,  1,  1,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0, -2,  1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  1,  0,  0, -2, -1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },

       /* 501-510 */
          {  1,  0,  0, -1, -1,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
          {  1,  0, -1,  0, -1,  0, -3,  5,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0, -4,  4,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0, -2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0, -8, 11,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  0,  0,  0, -9, 13,  0,  0,  0,  0,  0 },
          {  0,  0,  1,  1,  2,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0,  1, -4,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0,  0, -1,  0,  1, -3,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0,  7,-13,  0,  0,  0,  0,  0 },

       /* 511-520 */
          {  0,  0,  0,  0,  1,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  7,-11,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  6, -4,  0,  0,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0,  1 },

       /* 521-530 */
          {  0,  0,  0,  0,  0,  0,  1, -4,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  9,-17,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  7, -7,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -8,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  1 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0,  0 },
          {  2,  0,  0, -2,  0,  0,  0, -4,  8, -3,  0,  0,  0,  0 },

       /* 531-540 */
          {  2,  0,  0, -2,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
          {  1,  0,  0,  0,  0,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
          {  1,  0,  0,  0,  0,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0, -2,  0,  0, 17,-16,  0, -2,  0,  0,  0,  0 },
          {  1,  0,  0, -1,  0,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  3,  0, -4,  0,  0,  0,  0 },

       /* 541-550 */
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, -2, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  1,  0,  0,  0,  0,  2 },
          {  2,  0,  0, -2,  0,  0,  0, -4,  4,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2,  0,  0,  0, -2,  0,  2,  2,  0,  0,  0 },
          {  1,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0,  0,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
          {  1,  0,  0,  0,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0, -2,  0,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0, -2,  0,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
          {  1,  0,  0, -2,  0,  0,  0, -4,  8, -3,  0,  0,  0,  0 },

       /* 551-560 */
          {  1,  0,  0, -2,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  0,  0, -4,  4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1,  1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0,  3, -6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0,  1,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0, -4,  5,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  2,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },

       /* 561-570 */
          {  0,  0,  0,  0,  0,  0,  8, -9,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0 },
          {  2,  0, -2, -2, -2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
          {  1,  0,  0,  0,  1,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0,  0, -1,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2,  0,  2,  0,  2, -3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2,  0,  2,  0,  2, -2,  0,  0,  0,  0,  0,  0 },

       /* 571-580 */
          {  0,  0,  2,  0,  2,  0, -2,  3,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2,  0,  2,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  2,  0,  0,  0,  0,  1,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
          {  2,  0,  2, -2,  2,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
          {  2,  0,  1, -3,  1,  0, -6,  7,  0,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2,  0,  0,  2, -5,  0,  0,  0,  0,  0,  0 },
          {  2,  0,  0, -2,  0,  0,  0, -2,  0,  5, -5,  0,  0,  0 },
          {  2,  0,  0, -2,  0,  0,  0, -2,  0,  1,  5,  0,  0,  0 },
          {  2,  0,  0, -2,  0,  0,  0, -2,  0,  0,  5,  0,  0,  0 },

       /* 581-590 */
          {  2,  0,  0, -2,  0,  0,  0, -2,  0,  0,  2,  0,  0,  0 },
          {  2,  0,  0, -2,  0,  0, -4,  4,  0,  0,  0,  0,  0,  0 },
          {  2,  0, -2,  0, -2,  0,  0,  5, -9,  0,  0,  0,  0,  0 },
          {  2,  0, -1, -1,  0,  0,  0, -1,  0,  3,  0,  0,  0,  0 },
          {  1,  0,  2,  0,  2,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  2,  0,  2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
          {  1,  0,  2,  0,  2,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
          {  1,  0,  2,  0,  2,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  2, -2,  2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
          {  1,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0,  0 },

       /* 591-600 */
          {  1,  0,  0,  0,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
          {  1,  0,  0, -2,  0,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
          {  1,  0, -2, -2, -2,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
          {  1,  0, -1,  1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
          {  1,  0, -1, -1,  0,  0,  0,  8,-15,  0,  0,  0,  0,  0 },
          {  0,  0,  2,  2,  2,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0, -2,  0,  1,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  1,  0,  0,-10, 15,  0,  0,  0,  0,  0 },
          {  0,  0,  2, -2,  0, -1,  0,  2,  0,  0,  0,  0,  0,  0 },

       /* 601-610 */
          {  0,  0,  1, -1,  2,  0,  0, -1,  0,  0, -1,  0,  0,  0 },
          {  0,  0,  1, -1,  2,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0, -4,  6,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  1,  0, -1,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0, -2,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  1, -1, -1,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  2,  0,  0,  0,  2,  0, -2,  0,  0,  0,  0 },

       /* 611-620 */
          {  0,  0,  0,  2,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  2,  0, -3,  5,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  1,  0, -1,  2,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  9,-13,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  8,-14,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  8,-11,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  6, -8,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  6, -7,  0,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0, -2 },

       /* 621-630 */
          {  0,  0,  0,  0,  0,  0,  5, -6, -4,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  5, -4,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  4, -8,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  3, -3,  0,  2,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  7,-12,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0, -2 },

       /* 631-640 */
          {  0,  0,  0,  0,  0,  0,  0,  6, -8,  1,  5,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  6, -4,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  5,  0, -4,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0, -1 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -8,  3,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  5,-16,  4,  5,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  5,-13,  0,  0,  0,  0, -2 },

       /* 641-650 */
          {  0,  0,  0,  0,  0,  0,  0,  3,  0, -5,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -9,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  3, -7,  0,  0,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -3,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  2, -8,  1,  5,  0,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1, -5,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  2,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -3,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  5,  0,  0,  0 },

       /* 651-NFPL */
          {  0,  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -6,  3,  0, -2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2 },
          {  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0 }
       };

    /* Number of frequencies:  planetary */
       static const int NFPL = (int) (sizeof mfapl / sizeof (int) / 14);

    /* Pointers into amplitudes array, one pointer per frequency */
       static const int nc[] = {

       /* 1-100 */
           1,    21,    37,    51,    65,    79,    91,   103,   115,   127,
         139,   151,   163,   172,   184,   196,   207,   219,   231,   240,
         252,   261,   273,   285,   297,   309,   318,   327,   339,   351,
         363,   372,   384,   396,   405,   415,   423,   435,   444,   452,
         460,   467,   474,   482,   490,   498,   506,   513,   521,   528,
         536,   543,   551,   559,   566,   574,   582,   590,   597,   605,
         613,   620,   628,   636,   644,   651,   658,   666,   674,   680,
         687,   695,   702,   710,   717,   725,   732,   739,   746,   753,
         760,   767,   774,   782,   790,   798,   805,   812,   819,   826,
         833,   840,   846,   853,   860,   867,   874,   881,   888,   895,

       /* 101-200 */
         901,   908,   914,   921,   928,   934,   941,   948,   955,   962,
         969,   976,   982,   989,   996,  1003,  1010,  1017,  1024,  1031,
        1037,  1043,  1050,  1057,  1064,  1071,  1078,  1084,  1091,  1098,
        1104,  1112,  1118,  1124,  1131,  1138,  1145,  1151,  1157,  1164,
        1171,  1178,  1185,  1192,  1199,  1205,  1212,  1218,  1226,  1232,
        1239,  1245,  1252,  1259,  1266,  1272,  1278,  1284,  1292,  1298,
        1304,  1310,  1316,  1323,  1329,  1335,  1341,  1347,  1353,  1359,
        1365,  1371,  1377,  1383,  1389,  1396,  1402,  1408,  1414,  1420,
        1426,  1434,  1440,  1446,  1452,  1459,  1465,  1471,  1477,  1482,
        1488,  1493,  1499,  1504,  1509,  1514,  1520,  1527,  1532,  1538,

       /* 201-300 */
        1543,  1548,  1553,  1558,  1564,  1569,  1574,  1579,  1584,  1589,
        1594,  1596,  1598,  1600,  1602,  1605,  1608,  1610,  1612,  1617,
        1619,  1623,  1625,  1627,  1629,  1632,  1634,  1640,  1642,  1644,
        1646,  1648,  1650,  1652,  1654,  1658,  1660,  1662,  1664,  1668,
        1670,  1672,  1673,  1675,  1679,  1681,  1683,  1684,  1686,  1688,
        1690,  1693,  1695,  1697,  1701,  1703,  1705,  1707,  1709,  1711,
        1712,  1715,  1717,  1721,  1723,  1725,  1727,  1729,  1731,  1733,
        1735,  1737,  1739,  1741,  1743,  1745,  1747,  1749,  1751,  1753,
        1755,  1757,  1759,  1761,  1762,  1764,  1766,  1768,  1769,  1771,
        1773,  1775,  1777,  1779,  1781,  1783,  1785,  1787,  1788,  1790,

       /* 301-400 */
        1792,  1794,  1796,  1798,  1800,  1802,  1804,  1806,  1807,  1809,
        1811,  1815,  1817,  1819,  1821,  1823,  1825,  1827,  1829,  1831,
        1833,  1835,  1837,  1839,  1840,  1842,  1844,  1848,  1850,  1852,
        1854,  1856,  1858,  1859,  1860,  1862,  1864,  1866,  1868,  1869,
        1871,  1873,  1875,  1877,  1879,  1881,  1883,  1885,  1887,  1889,
        1891,  1892,  1896,  1898,  1900,  1901,  1903,  1905,  1907,  1909,
        1910,  1911,  1913,  1915,  1919,  1921,  1923,  1927,  1929,  1931,
        1933,  1935,  1937,  1939,  1943,  1945,  1947,  1948,  1949,  1951,
        1953,  1955,  1957,  1958,  1960,  1962,  1964,  1966,  1968,  1970,
        1971,  1973,  1974,  1975,  1977,  1979,  1980,  1981,  1982,  1984,

       /* 401-500 */
        1986,  1988,  1990,  1992,  1994,  1995,  1997,  1999,  2001,  2003,
        2005,  2007,  2008,  2009,  2011,  2013,  2015,  2017,  2019,  2021,
        2023,  2024,  2025,  2027,  2029,  2031,  2033,  2035,  2037,  2041,
        2043,  2045,  2046,  2047,  2049,  2051,  2053,  2055,  2056,  2057,
        2059,  2061,  2063,  2065,  2067,  2069,  2070,  2071,  2072,  2074,
        2076,  2078,  2080,  2082,  2084,  2086,  2088,  2090,  2092,  2094,
        2095,  2096,  2097,  2099,  2101,  2105,  2106,  2107,  2108,  2109,
        2110,  2111,  2113,  2115,  2119,  2121,  2123,  2125,  2127,  2129,
        2131,  2133,  2135,  2136,  2137,  2139,  2141,  2143,  2145,  2147,
        2149,  2151,  2153,  2155,  2157,  2159,  2161,  2163,  2165,  2167,

       /* 501-600 */
        2169,  2171,  2173,  2175,  2177,  2179,  2181,  2183,  2185,  2186,
        2187,  2188,  2192,  2193,  2195,  2197,  2199,  2201,  2203,  2205,
        2207,  2209,  2211,  2213,  2217,  2219,  2221,  2223,  2225,  2227,
        2229,  2231,  2233,  2234,  2235,  2236,  2237,  2238,  2239,  2240,
        2241,  2244,  2246,  2248,  2250,  2252,  2254,  2256,  2258,  2260,
        2262,  2264,  2266,  2268,  2270,  2272,  2274,  2276,  2278,  2280,
        2282,  2284,  2286,  2288,  2290,  2292,  2294,  2296,  2298,  2300,
        2302,  2303,  2304,  2305,  2306,  2307,  2309,  2311,  2313,  2315,
        2317,  2319,  2321,  2323,  2325,  2327,  2329,  2331,  2333,  2335,
        2337,  2341,  2343,  2345,  2347,  2349,  2351,  2352,  2355,  2356,

       /* 601-700 */
        2357,  2358,  2359,  2361,  2363,  2364,  2365,  2366,  2367,  2368,
        2369,  2370,  2371,  2372,  2373,  2374,  2376,  2378,  2380,  2382,
        2384,  2385,  2386,  2387,  2388,  2389,  2390,  2391,  2392,  2393,
        2394,  2395,  2396,  2397,  2398,  2399,  2400,  2401,  2402,  2403,
        2404,  2405,  2406,  2407,  2408,  2409,  2410,  2411,  2412,  2413,
        2414,  2415,  2417,  2418,  2430,  2438,  2445,  2453,  2460,  2468,
        2474,  2480,  2488,  2496,  2504,  2512,  2520,  2527,  2535,  2543,
        2550,  2558,  2566,  2574,  2580,  2588,  2596,  2604,  2612,  2619,
        2627,  2634,  2642,  2648,  2656,  2664,  2671,  2679,  2685,  2693,
        2701,  2709,  2717,  2725,  2733,  2739,  2747,  2753,  2761,  2769,

       /* 701-800 */
        2777,  2785,  2793,  2801,  2809,  2817,  2825,  2833,  2841,  2848,
        2856,  2864,  2872,  2878,  2884,  2892,  2898,  2906,  2914,  2922,
        2930,  2938,  2944,  2952,  2958,  2966,  2974,  2982,  2988,  2996,
        3001,  3009,  3017,  3025,  3032,  3039,  3045,  3052,  3059,  3067,
        3069,  3076,  3083,  3090,  3098,  3105,  3109,  3111,  3113,  3120,
        3124,  3128,  3132,  3136,  3140,  3144,  3146,  3150,  3158,  3161,
        3165,  3166,  3168,  3172,  3176,  3180,  3182,  3185,  3189,  3193,
        3194,  3197,  3200,  3204,  3208,  3212,  3216,  3219,  3221,  3222,
        3226,  3230,  3234,  3238,  3242,  3243,  3247,  3251,  3254,  3258,
        3262,  3266,  3270,  3274,  3275,  3279,  3283,  3287,  3289,  3293,

       /* 801-900 */
        3296,  3300,  3303,  3307,  3311,  3315,  3319,  3321,  3324,  3327,
        3330,  3334,  3338,  3340,  3342,  3346,  3350,  3354,  3358,  3361,
        3365,  3369,  3373,  3377,  3381,  3385,  3389,  3393,  3394,  3398,
        3402,  3406,  3410,  3413,  3417,  3421,  3425,  3429,  3433,  3435,
        3439,  3443,  3446,  3450,  3453,  3457,  3458,  3461,  3464,  3468,
        3472,  3476,  3478,  3481,  3485,  3489,  3493,  3497,  3501,  3505,
        3507,  3511,  3514,  3517,  3521,  3524,  3525,  3527,  3529,  3533,
        3536,  3540,  3541,  3545,  3548,  3551,  3555,  3559,  3563,  3567,
        3569,  3570,  3574,  3576,  3578,  3582,  3586,  3590,  3593,  3596,
        3600,  3604,  3608,  3612,  3616,  3620,  3623,  3626,  3630,  3632,

       /* 901-1000 */
        3636,  3640,  3643,  3646,  3648,  3652,  3656,  3660,  3664,  3667,
        3669,  3671,  3675,  3679,  3683,  3687,  3689,  3693,  3694,  3695,
        3699,  3703,  3705,  3707,  3710,  3713,  3717,  3721,  3725,  3729,
        3733,  3736,  3740,  3744,  3748,  3752,  3754,  3757,  3759,  3763,
        3767,  3770,  3773,  3777,  3779,  3783,  3786,  3790,  3794,  3798,
        3801,  3805,  3809,  3813,  3817,  3821,  3825,  3827,  3831,  3835,
        3836,  3837,  3840,  3844,  3848,  3852,  3856,  3859,  3863,  3867,
        3869,  3871,  3875,  3879,  3883,  3887,  3890,  3894,  3898,  3901,
        3905,  3909,  3913,  3917,  3921,  3922,  3923,  3924,  3926,  3930,
        3932,  3936,  3938,  3940,  3944,  3948,  3952,  3956,  3959,  3963,

       /* 1001-1100 */
        3965,  3969,  3973,  3977,  3979,  3981,  3982,  3986,  3989,  3993,
        3997,  4001,  4004,  4006,  4009,  4012,  4016,  4020,  4024,  4026,
        4028,  4032,  4036,  4040,  4044,  4046,  4050,  4054,  4058,  4060,
        4062,  4063,  4064,  4068,  4071,  4075,  4077,  4081,  4083,  4087,
        4089,  4091,  4095,  4099,  4101,  4103,  4105,  4107,  4111,  4115,
        4119,  4123,  4127,  4129,  4131,  4135,  4139,  4141,  4143,  4145,
        4149,  4153,  4157,  4161,  4165,  4169,  4173,  4177,  4180,  4183,
        4187,  4191,  4195,  4198,  4201,  4205,  4209,  4212,  4213,  4216,
        4217,  4221,  4223,  4226,  4230,  4234,  4236,  4240,  4244,  4248,
        4252,  4256,  4258,  4262,  4264,  4266,  4268,  4270,  4272,  4276,

       /* 1101-1200 */
        4279,  4283,  4285,  4287,  4289,  4293,  4295,  4299,  4300,  4301,
        4305,  4309,  4313,  4317,  4319,  4323,  4325,  4329,  4331,  4333,
        4335,  4337,  4341,  4345,  4349,  4351,  4353,  4357,  4361,  4365,
        4367,  4369,  4373,  4377,  4381,  4383,  4387,  4389,  4391,  4395,
        4399,  4403,  4407,  4411,  4413,  4414,  4415,  4418,  4419,  4421,
        4423,  4427,  4429,  4431,  4433,  4435,  4437,  4439,  4443,  4446,
        4450,  4452,  4456,  4458,  4460,  4462,  4466,  4469,  4473,  4477,
        4481,  4483,  4487,  4489,  4491,  4493,  4497,  4499,  4501,  4504,
        4506,  4510,  4513,  4514,  4515,  4518,  4521,  4522,  4525,  4526,
        4527,  4530,  4533,  4534,  4537,  4541,  4542,  4543,  4544,  4545,

       /* 1201-1300 */
        4546,  4547,  4550,  4553,  4554,  4555,  4558,  4561,  4564,  4567,
        4568,  4571,  4574,  4575,  4578,  4581,  4582,  4585,  4586,  4588,
        4590,  4592,  4596,  4598,  4602,  4604,  4608,  4612,  4613,  4616,
        4619,  4622,  4623,  4624,  4625,  4626,  4629,  4632,  4633,  4636,
        4639,  4640,  4641,  4642,  4643,  4644,  4645,  4648,  4649,  4650,
        4651,  4652,  4653,  4656,  4657,  4660,  4661,  4664,  4667,  4670,
        4671,  4674,  4675,  4676,  4677,  4678,  4681,  4682,  4683,  4684,
        4687,  4688,  4689,  4692,  4693,  4696,  4697,  4700,  4701,  4702,
        4703,  4704,  4707,  4708,  4711,  4712,  4715,  4716,  4717,  4718,
        4719,  4720,  4721,  4722,  4723,  4726,  4729,  4730,  4733,  4736,

       /* 1301-(NFLS+NFPL) */
        4737,  4740,  4741,  4742,  4745,  4746,  4749,  4752,  4753
       };

    /* Amplitude coefficients (microarcsec);  indexed using the nc array. */
       static const double a[] = {

       /* 1-105 */
             -6844318.44,     9205236.26,1328.67,1538.18,      205833.11,
               153041.79,       -3309.73, 853.32,2037.98,       -2301.27,
           81.46, 120.56, -20.39, -15.22,   1.73,  -1.61,  -0.10,   0.11,
           -0.02,  -0.02,     -523908.04,      573033.42,-544.75,-458.66,
                12814.01,       11714.49, 198.97,-290.91, 155.74,-143.27,
           -2.75,  -1.03,  -1.27,  -1.16,   0.00,  -0.01,      -90552.22,
                97846.69, 111.23, 137.41,2187.91,2024.68,  41.44, -51.26,
           26.92, -24.46,  -0.46,  -0.28,  -0.22,  -0.20,       82168.76,
               -89618.24, -27.64, -29.05,       -2004.36,       -1837.32,
          -36.07,  48.00, -24.43,  22.41,   0.47,   0.24,   0.20,   0.18,
                58707.02,7387.02, 470.05,-192.40, 164.33,       -1312.21,
         -179.73, -28.93, -17.36,  -1.83,  -0.50,   3.57,   0.00,   0.13,
               -20557.78,       22438.42, -20.84, -17.40, 501.82, 459.68,
           59.20, -67.30,   6.08,  -5.61,  -1.36,  -1.19,       28288.28,
         -674.99, -34.69,  35.80, -15.07,-632.54, -11.19,   0.78,  -8.41,
            0.17,   0.01,   0.07,      -15406.85,       20069.50,  15.12,

       /* 106-219 */
           31.80, 448.76, 344.50,  -5.77,   1.41,   4.59,  -5.02,   0.17,
            0.24,      -11991.74,       12902.66,  32.46,  36.70, 288.49,
          268.14,   5.70,  -7.06,   3.57,  -3.23,  -0.06,  -0.04,
                -8584.95,       -9592.72,   4.42, -13.20,-214.50, 192.06,
           23.87,  29.83,   2.54,   2.40,   0.60,  -0.48,5095.50,
                -6918.22,   7.19,   3.92,-154.91,-113.94,   2.86,  -1.04,
           -1.52,   1.73,  -0.07,  -0.10,       -4910.93,       -5331.13,
            0.76,   0.40,-119.21, 109.81,   2.16,   3.20,   1.46,   1.33,
            0.04,  -0.02,       -6245.02,-123.48,  -6.68,  -8.20,  -2.76,
          139.64,   2.71,   0.15,   1.86,2511.85,       -3323.89,   1.07,
           -0.90, -74.33, -56.17,   1.16,  -0.01,  -0.75,   0.83,  -0.02,
           -0.04,2307.58,3143.98,  -7.52,   7.50,  70.31, -51.60,   1.46,
            0.16,  -0.69,  -0.79,   0.02,  -0.05,2372.58,2554.51,   5.93,
           -6.60,  57.12, -53.05,  -0.96,  -1.24,  -0.71,  -0.64,  -0.01,
                -2053.16,2636.13,   5.13,   7.80,  58.94,  45.91,  -0.42,
           -0.12,   0.61,  -0.66,   0.02,   0.03,       -1825.49,

       /* 220-339 */
                -2423.59,   1.23,  -2.00, -54.19,  40.82,  -1.07,  -1.02,
            0.54,   0.61,  -0.04,   0.04,2521.07,-122.28,  -5.97,   2.90,
           -2.73, -56.37,  -0.82,   0.13,  -0.75,       -1534.09,1645.01,
            6.29,   6.80,  36.78,  34.30,   0.92,  -1.25,   0.46,  -0.41,
           -0.02,  -0.01,1898.27,  47.70,  -0.72,   2.50,   1.07, -42.45,
           -0.94,   0.02,  -0.56,       -1292.02,       -1387.00,   0.00,
            0.00, -31.01,  28.89,   0.68,   0.00,   0.38,   0.35,  -0.01,
           -0.01,       -1234.96,1323.81,   5.21,   5.90,  29.60,  27.61,
            0.74,  -1.22,   0.37,  -0.33,  -0.02,  -0.01,1137.48,
                -1233.89,  -0.04,  -0.30, -27.59, -25.43,  -0.61,   1.00,
           -0.34,   0.31,   0.01,   0.01,-813.13,       -1075.60,   0.40,
            0.30, -24.05,  18.18,  -0.40,  -0.01,   0.24,   0.27,  -0.01,
            0.01,1163.22, -60.90,  -2.94,   1.30,  -1.36, -26.01,  -0.58,
            0.07,  -0.35,1029.70, -55.55,  -2.63,   1.10,  -1.25, -23.02,
           -0.52,   0.06,  -0.31,-556.26, 852.85,   3.16,  -4.48,  19.06,
           12.44,  -0.81,  -0.27,   0.17,  -0.21,   0.00,   0.02,-603.52,

       /* 340-467 */
         -800.34,   0.44,   0.10, -17.90,  13.49,  -0.08,  -0.01,   0.18,
            0.20,  -0.01,   0.01,-628.24, 684.99,  -0.64,  -0.50,  15.32,
           14.05,   3.18,  -4.19,   0.19,  -0.17,  -0.09,  -0.07,-866.48,
          -16.26,   0.52,  -1.30,  -0.36,  19.37,   0.43,  -0.01,   0.26,
         -512.37, 695.54,  -1.47,  -1.40,  15.55,  11.46,  -0.16,   0.03,
            0.15,  -0.17,   0.01,   0.01, 506.65, 643.75,   2.54,  -2.62,
           14.40, -11.33,  -0.77,  -0.06,  -0.15,  -0.16,   0.00,   0.01,
          664.57,  16.81,  -0.40,   1.00,   0.38, -14.86,  -3.71,  -0.09,
           -0.20, 405.91, 522.11,   0.99,  -1.50,  11.67,  -9.08,  -0.25,
           -0.02,  -0.12,  -0.13,-305.78, 326.60,   1.75,   1.90,   7.30,
            6.84,   0.20,  -0.04, 300.99,-325.03,  -0.44,  -0.50,  -7.27,
           -6.73,  -1.01,   0.01,   0.00,   0.08,   0.00,   0.02, 438.51,
           10.47,  -0.56,  -0.20,   0.24,  -9.81,  -0.24,   0.01,  -0.13,
         -264.02, 335.24,   0.99,   1.40,   7.49,   5.90,  -0.27,  -0.02,
          284.09, 307.03,   0.32,  -0.40,   6.87,  -6.35,  -0.99,  -0.01,
         -250.54, 327.11,   0.08,   0.40,   7.31,   5.60,  -0.30, 230.72,

       /* 468-595 */
         -304.46,   0.08,  -0.10,  -6.81,  -5.16,   0.27, 229.78, 304.17,
           -0.60,   0.50,   6.80,  -5.14,   0.33,   0.01, 256.30,-276.81,
           -0.28,  -0.40,  -6.19,  -5.73,  -0.14,   0.01,-212.82, 269.45,
            0.84,   1.20,   6.02,   4.76,   0.14,  -0.02, 196.64, 272.05,
           -0.84,   0.90,   6.08,  -4.40,   0.35,   0.02, 188.95, 272.22,
           -0.12,   0.30,   6.09,  -4.22,   0.34,-292.37,  -5.10,  -0.32,
           -0.40,  -0.11,   6.54,   0.14,   0.01, 161.79,-220.67,   0.24,
            0.10,  -4.93,  -3.62,  -0.08, 261.54, -19.94,  -0.95,   0.20,
           -0.45,  -5.85,  -0.13,   0.02, 142.16,-190.79,   0.20,   0.10,
           -4.27,  -3.18,  -0.07, 187.95,  -4.11,  -0.24,   0.30,  -0.09,
           -4.20,  -0.09,   0.01,   0.00,   0.00, -79.08, 167.90,   0.04,
            0.00,   3.75,   1.77, 121.98, 131.04,  -0.08,   0.10,   2.93,
           -2.73,  -0.06,-172.95,  -8.11,  -0.40,  -0.20,  -0.18,   3.87,
            0.09,   0.01,-160.15, -55.30, -14.04,  13.90,  -1.23,   3.58,
            0.40,   0.31,-115.40, 123.20,   0.60,   0.70,   2.75,   2.58,
            0.08,  -0.01,-168.26,  -2.00,   0.20,  -0.20,  -0.04,   3.76,

       /* 596-723 */
            0.08,-114.49, 123.20,   0.32,   0.40,   2.75,   2.56,   0.07,
           -0.01, 112.14, 120.70,   0.28,  -0.30,   2.70,  -2.51,  -0.07,
           -0.01, 161.34,   4.03,   0.20,   0.20,   0.09,  -3.61,  -0.08,
           91.31, 126.64,  -0.40,   0.40,   2.83,  -2.04,  -0.04,   0.01,
          105.29, 112.90,   0.44,  -0.50,   2.52,  -2.35,  -0.07,  -0.01,
           98.69,-106.20,  -0.28,  -0.30,  -2.37,  -2.21,  -0.06,   0.01,
           86.74,-112.94,  -0.08,  -0.20,  -2.53,  -1.94,  -0.05,-134.81,
            3.51,   0.20,  -0.20,   0.08,   3.01,   0.07,  79.03, 107.31,
           -0.24,   0.20,   2.40,  -1.77,  -0.04,   0.01, 132.81, -10.77,
           -0.52,   0.10,  -0.24,  -2.97,  -0.07,   0.01,-130.31,  -0.90,
            0.04,   0.00,   0.00,   2.91, -78.56,  85.32,   0.00,   0.00,
            1.91,   1.76,   0.04,   0.00,   0.00, -41.53,  89.10,   0.02,
            0.00,   1.99,   0.93,  66.03, -71.00,  -0.20,  -0.20,  -1.59,
           -1.48,  -0.04,  60.50,  64.70,   0.36,  -0.40,   1.45,  -1.35,
           -0.04,  -0.01, -52.27, -70.01,   0.00,   0.00,  -1.57,   1.17,
            0.03, -52.95,  66.29,   0.32,   0.40,   1.48,   1.18,   0.04,

       /* 724-851 */
           -0.01,  51.02,  67.25,   0.00,   0.00,   1.50,  -1.14,  -0.03,
          -55.66, -60.92,   0.16,  -0.20,  -1.36,   1.24,   0.03, -54.81,
          -59.20,  -0.08,   0.20,  -1.32,   1.23,   0.03,  51.32, -55.60,
            0.00,   0.00,  -1.24,  -1.15,  -0.03,  48.29,  51.80,   0.20,
           -0.20,   1.16,  -1.08,  -0.03, -45.59, -49.00,  -0.12,   0.10,
           -1.10,   1.02,   0.03,  40.54, -52.69,  -0.04,  -0.10,  -1.18,
           -0.91,  -0.02, -40.58, -49.51,  -1.00,   1.00,  -1.11,   0.91,
            0.04,   0.02, -43.76,  46.50,   0.36,   0.40,   1.04,   0.98,
            0.03,  -0.01,  62.65,  -5.00,  -0.24,   0.00,  -0.11,  -1.40,
           -0.03,   0.01, -38.57,  49.59,   0.08,   0.10,   1.11,   0.86,
            0.02, -33.22, -44.04,   0.08,  -0.10,  -0.98,   0.74,   0.02,
           37.15, -39.90,  -0.12,  -0.10,  -0.89,  -0.83,  -0.02,  36.68,
          -39.50,  -0.04,  -0.10,  -0.88,  -0.82,  -0.02, -53.22,  -3.91,
           -0.20,   0.00,  -0.09,   1.19,   0.03,  32.43, -42.19,  -0.04,
           -0.10,  -0.94,  -0.73,  -0.02, -51.00,  -2.30,  -0.12,  -0.10,
            0.00,   1.14, -29.53, -39.11,   0.04,   0.00,  -0.87,   0.66,

       /* 852-979 */
            0.02,  28.50, -38.92,  -0.08,  -0.10,  -0.87,  -0.64,  -0.02,
           26.54,  36.95,  -0.12,   0.10,   0.83,  -0.59,  -0.01,  26.54,
           34.59,   0.04,  -0.10,   0.77,  -0.59,  -0.02,  28.35, -32.55,
           -0.16,   0.20,  -0.73,  -0.63,  -0.01, -28.00,  30.40,   0.00,
            0.00,   0.68,   0.63,   0.01, -27.61,  29.40,   0.20,   0.20,
            0.66,   0.62,   0.02,  40.33,   0.40,  -0.04,   0.10,   0.00,
           -0.90, -23.28,  31.61,  -0.08,  -0.10,   0.71,   0.52,   0.01,
           37.75,   0.80,   0.04,   0.10,   0.00,  -0.84,  23.66,  25.80,
            0.00,   0.00,   0.58,  -0.53,  -0.01,  21.01, -27.91,   0.00,
            0.00,  -0.62,  -0.47,  -0.01, -34.81,   2.89,   0.04,   0.00,
            0.00,   0.78, -23.49, -25.31,   0.00,   0.00,  -0.57,   0.53,
            0.01, -23.47,  25.20,   0.16,   0.20,   0.56,   0.52,   0.02,
           19.58,  27.50,  -0.12,   0.10,   0.62,  -0.44,  -0.01, -22.67,
          -24.40,  -0.08,   0.10,  -0.55,   0.51,   0.01, -19.97,  25.00,
            0.12,   0.20,   0.56,   0.45,   0.01,  21.28, -22.80,  -0.08,
           -0.10,  -0.51,  -0.48,  -0.01, -30.47,   0.91,   0.04,   0.00,

       /* 980-1107 */
            0.00,   0.68,  18.58,  24.00,   0.04,  -0.10,   0.54,  -0.42,
           -0.01, -18.02,  24.40,  -0.04,  -0.10,   0.55,   0.40,   0.01,
           17.74,  22.50,   0.08,  -0.10,   0.50,  -0.40,  -0.01, -19.41,
           20.70,   0.08,   0.10,   0.46,   0.43,   0.01, -18.64,  20.11,
            0.00,   0.00,   0.45,   0.42,   0.01, -16.75,  21.60,   0.04,
            0.10,   0.48,   0.37,   0.01, -18.42, -20.00,   0.00,   0.00,
           -0.45,   0.41,   0.01, -26.77,   1.41,   0.08,   0.00,   0.00,
            0.60, -26.17,  -0.19,   0.00,   0.00,   0.00,   0.59, -15.52,
           20.51,   0.00,   0.00,   0.46,   0.35,   0.01, -25.42,  -1.91,
           -0.08,   0.00,  -0.04,   0.57,   0.45, -17.42,  18.10,   0.00,
            0.00,   0.40,   0.39,   0.01,  16.39, -17.60,  -0.08,  -0.10,
           -0.39,  -0.37,  -0.01, -14.37,  18.91,   0.00,   0.00,   0.42,
            0.32,   0.01,  23.39,  -2.40,  -0.12,   0.00,   0.00,  -0.52,
           14.32, -18.50,  -0.04,  -0.10,  -0.41,  -0.32,  -0.01,  15.69,
           17.08,   0.00,   0.00,   0.38,  -0.35,  -0.01, -22.99,   0.50,
            0.04,   0.00,   0.00,   0.51,   0.00,   0.00,  14.47, -17.60,

       /* 1108-1235 */
           -0.01,   0.00,  -0.39,  -0.32, -13.33,  18.40,  -0.04,  -0.10,
            0.41,   0.30,  22.47,  -0.60,  -0.04,   0.00,   0.00,  -0.50,
          -12.78, -17.41,   0.04,   0.00,  -0.39,   0.29,   0.01, -14.10,
          -15.31,   0.04,   0.00,  -0.34,   0.32,   0.01,  11.98,  16.21,
           -0.04,   0.00,   0.36,  -0.27,  -0.01,  19.65,  -1.90,  -0.08,
            0.00,   0.00,  -0.44,  19.61,  -1.50,  -0.08,   0.00,   0.00,
           -0.44,  13.41, -14.30,  -0.04,  -0.10,  -0.32,  -0.30,  -0.01,
          -13.29,  14.40,   0.00,   0.00,   0.32,   0.30,   0.01,  11.14,
          -14.40,  -0.04,   0.00,  -0.32,  -0.25,  -0.01,  12.24, -13.38,
            0.04,   0.00,  -0.30,  -0.27,  -0.01,  10.07, -13.81,   0.04,
            0.00,  -0.31,  -0.23,  -0.01,  10.46,  13.10,   0.08,  -0.10,
            0.29,  -0.23,  -0.01,  16.55,  -1.71,  -0.08,   0.00,   0.00,
           -0.37,   9.75, -12.80,   0.00,   0.00,  -0.29,  -0.22,  -0.01,
            9.11,  12.80,   0.00,   0.00,   0.29,  -0.20,   0.00,   0.00,
           -6.44, -13.80,   0.00,   0.00,  -0.31,   0.14,  -9.19, -12.00,
            0.00,   0.00,  -0.27,   0.21, -10.30,  10.90,   0.08,   0.10,

       /* 1236-1363 */
            0.24,   0.23,   0.01,  14.92,  -0.80,  -0.04,   0.00,   0.00,
           -0.33,  10.02, -10.80,   0.00,   0.00,  -0.24,  -0.22,  -0.01,
           -9.75,  10.40,   0.04,   0.00,   0.23,   0.22,   0.01,   9.67,
          -10.40,  -0.04,   0.00,  -0.23,  -0.22,  -0.01,  -8.28, -11.20,
            0.04,   0.00,  -0.25,   0.19,  13.32,  -1.41,  -0.08,   0.00,
            0.00,  -0.30,   8.27,  10.50,   0.04,   0.00,   0.23,  -0.19,
            0.00,   0.00,  13.13,   0.00,   0.00,   0.00,   0.00,  -0.29,
          -12.93,   0.70,   0.04,   0.00,   0.00,   0.29,   7.91, -10.20,
            0.00,   0.00,  -0.23,  -0.18,  -7.84, -10.00,  -0.04,   0.00,
           -0.22,   0.18,   7.44,   9.60,   0.00,   0.00,   0.21,  -0.17,
           -7.64,   9.40,   0.08,   0.10,   0.21,   0.17,   0.01, -11.38,
            0.60,   0.04,   0.00,   0.00,   0.25,  -7.48,   8.30,   0.00,
            0.00,   0.19,   0.17, -10.98,  -0.20,   0.00,   0.00,   0.00,
            0.25,  10.98,   0.20,   0.00,   0.00,   0.00,  -0.25,   7.40,
           -7.90,  -0.04,   0.00,  -0.18,  -0.17,  -6.09,   8.40,  -0.04,
            0.00,   0.19,   0.14,  -6.94,  -7.49,   0.00,   0.00,  -0.17,

       /* 1364-1491 */
            0.16,   6.92,   7.50,   0.04,   0.00,   0.17,  -0.15,   6.20,
            8.09,   0.00,   0.00,   0.18,  -0.14,  -6.12,   7.80,   0.04,
            0.00,   0.17,   0.14,   5.85,  -7.50,   0.00,   0.00,  -0.17,
           -0.13,  -6.48,   6.90,   0.08,   0.10,   0.15,   0.14,   0.01,
            6.32,   6.90,   0.00,   0.00,   0.15,  -0.14,   5.61,  -7.20,
            0.00,   0.00,  -0.16,  -0.13,   9.07,   0.00,   0.00,   0.00,
            0.00,  -0.20,   5.25,   6.90,   0.00,   0.00,   0.15,  -0.12,
           -8.47,  -0.40,   0.00,   0.00,   0.00,   0.19,   6.32,  -5.39,
           -1.11,   1.10,  -0.12,  -0.14,   0.02,   0.02,   5.73,  -6.10,
           -0.04,   0.00,  -0.14,  -0.13,   4.70,   6.60,  -0.04,   0.00,
            0.15,  -0.11,  -4.90,  -6.40,   0.00,   0.00,  -0.14,   0.11,
           -5.33,   5.60,   0.04,   0.10,   0.13,   0.12,   0.01,  -4.81,
            6.00,   0.04,   0.00,   0.13,   0.11,   5.13,   5.50,   0.04,
            0.00,   0.12,  -0.11,   4.50,   5.90,   0.00,   0.00,   0.13,
           -0.10,  -4.22,   6.10,   0.00,   0.00,   0.14,  -4.53,   5.70,
            0.00,   0.00,   0.13,   0.10,   4.18,   5.70,   0.00,   0.00,

       /* 1492-1619 */
            0.13,  -4.75,  -5.19,   0.00,   0.00,  -0.12,   0.11,  -4.06,
            5.60,   0.00,   0.00,   0.13,  -3.98,   5.60,  -0.04,   0.00,
            0.13,   4.02,  -5.40,   0.00,   0.00,  -0.12,   4.49,  -4.90,
           -0.04,   0.00,  -0.11,  -0.10,  -3.62,  -5.40,  -0.16,   0.20,
           -0.12,   0.00,   0.01,   4.38,   4.80,   0.00,   0.00,   0.11,
           -6.40,  -0.10,   0.00,   0.00,   0.00,   0.14,  -3.98,   5.00,
            0.04,   0.00,   0.11,  -3.82,  -5.00,   0.00,   0.00,  -0.11,
           -3.71,   5.07,   0.00,   0.00,   0.11,   4.14,   4.40,   0.00,
            0.00,   0.10,  -6.01,  -0.50,  -0.04,   0.00,   0.00,   0.13,
           -4.04,   4.39,   0.00,   0.00,   0.10,   3.45,  -4.72,   0.00,
            0.00,  -0.11,   3.31,   4.71,   0.00,   0.00,   0.11,   3.26,
           -4.50,   0.00,   0.00,  -0.10,  -3.26,  -4.50,   0.00,   0.00,
           -0.10,  -3.34,  -4.40,   0.00,   0.00,  -0.10,  -3.74,  -4.00,
            3.70,   4.00,   3.34,  -4.30,   3.30,  -4.30,  -3.66,   3.90,
            0.04,   3.66,   3.90,   0.04,  -3.62,  -3.90,  -3.61,   3.90,
           -0.20,   5.30,   0.00,   0.00,   0.12,   3.06,   4.30,   3.30,

       /* 1620-1747 */
            4.00,   0.40,   0.20,   3.10,   4.10,  -3.06,   3.90,  -3.30,
           -3.60,  -3.30,   3.36,   0.01,   3.14,   3.40,  -4.57,  -0.20,
            0.00,   0.00,   0.00,   0.10,  -2.70,  -3.60,   2.94,  -3.20,
           -2.90,   3.20,   2.47,  -3.40,   2.55,  -3.30,   2.80,  -3.08,
            2.51,   3.30,  -4.10,   0.30,  -0.12,  -0.10,   4.10,   0.20,
           -2.74,   3.00,   2.46,   3.23,  -3.66,   1.20,  -0.20,   0.20,
            3.74,  -0.40,  -2.51,  -2.80,  -3.74,   2.27,  -2.90,   0.00,
            0.00,  -2.50,   2.70,  -2.51,   2.60,  -3.50,   0.20,   3.38,
           -2.22,  -2.50,   3.26,  -0.40,   1.95,  -2.60,   3.22,  -0.40,
           -0.04,  -1.79,  -2.60,   1.91,   2.50,   0.74,   3.05,  -0.04,
            0.08,   2.11,  -2.30,  -2.11,   2.20,  -1.87,  -2.40,   2.03,
           -2.20,  -2.03,   2.20,   2.98,   0.00,   0.00,   2.98,  -1.71,
            2.40,   2.94,  -0.10,  -0.12,   0.10,   1.67,   2.40,  -1.79,
            2.30,  -1.79,   2.20,  -1.67,   2.20,   1.79,  -2.00,   1.87,
           -1.90,   1.63,  -2.10,  -1.59,   2.10,   1.55,  -2.10,  -1.55,
            2.10,  -2.59,  -0.20,  -1.75,  -1.90,  -1.75,   1.90,  -1.83,

       /* 1748-1875 */
           -1.80,   1.51,   2.00,  -1.51,  -2.00,   1.71,   1.80,   1.31,
            2.10,  -1.43,   2.00,   1.43,   2.00,  -2.43,  -1.51,   1.90,
           -1.47,   1.90,   2.39,   0.20,  -2.39,   1.39,   1.90,   1.39,
           -1.80,   1.47,  -1.60,   1.47,  -1.60,   1.43,  -1.50,  -1.31,
            1.60,   1.27,  -1.60,  -1.27,   1.60,   1.27,  -1.60,   2.03,
            1.35,   1.50,  -1.39,  -1.40,   1.95,  -0.20,  -1.27,   1.49,
            1.19,   1.50,   1.27,   1.40,   1.15,   1.50,   1.87,  -0.10,
           -1.12,  -1.50,   1.87,  -1.11,  -1.50,  -1.11,  -1.50,   0.00,
            0.00,   1.19,   1.40,   1.27,  -1.30,  -1.27,  -1.30,  -1.15,
            1.40,  -1.23,   1.30,  -1.23,  -1.30,   1.22,  -1.29,   1.07,
           -1.40,   1.75,  -0.20,  -1.03,  -1.40,  -1.07,   1.20,  -1.03,
            1.15,   1.07,   1.10,   1.51,  -1.03,   1.10,   1.03,  -1.10,
            0.00,   0.00,  -1.03,  -1.10,   0.91,  -1.20,  -0.88,  -1.20,
           -0.88,   1.20,  -0.95,   1.10,  -0.95,  -1.10,   1.43,  -1.39,
            0.95,  -1.00,  -0.95,   1.00,  -0.80,   1.10,   0.91,  -1.00,
           -1.35,   0.88,   1.00,  -0.83,   1.00,  -0.91,   0.90,   0.91,

       /* 1876-2003 */
            0.90,   0.88,  -0.90,  -0.76,  -1.00,  -0.76,   1.00,   0.76,
            1.00,  -0.72,   1.00,   0.84,  -0.90,   0.84,   0.90,   1.23,
            0.00,   0.00,  -0.52,  -1.10,  -0.68,   1.00,   1.19,  -0.20,
            1.19,   0.76,   0.90,   1.15,  -0.10,   1.15,  -0.10,   0.72,
           -0.90,  -1.15,  -1.15,   0.68,   0.90,  -0.68,   0.90,  -1.11,
            0.00,   0.00,   0.20,   0.79,   0.80,  -1.11,  -0.10,   0.00,
            0.00,  -0.48,  -1.00,  -0.76,  -0.80,  -0.72,  -0.80,  -1.07,
           -0.10,   0.64,   0.80,  -0.64,  -0.80,   0.64,   0.80,   0.40,
            0.60,   0.52,  -0.50,  -0.60,  -0.80,  -0.71,   0.70,  -0.99,
            0.99,   0.56,   0.80,  -0.56,   0.80,   0.68,  -0.70,   0.68,
            0.70,  -0.95,  -0.64,   0.70,   0.64,   0.70,  -0.60,   0.70,
           -0.60,  -0.70,  -0.91,  -0.10,  -0.51,   0.76,  -0.91,  -0.56,
            0.70,   0.88,   0.88,  -0.63,  -0.60,   0.55,  -0.60,  -0.80,
            0.80,  -0.80,  -0.52,   0.60,   0.52,   0.60,   0.52,  -0.60,
           -0.48,   0.60,   0.48,   0.60,   0.48,   0.60,  -0.76,   0.44,
           -0.60,   0.52,  -0.50,  -0.52,   0.50,   0.40,   0.60,  -0.40,

       /* 2004-2131 */
           -0.60,   0.40,  -0.60,   0.72,  -0.72,  -0.51,  -0.50,  -0.48,
            0.50,   0.48,  -0.50,  -0.48,   0.50,  -0.48,   0.50,   0.48,
           -0.50,  -0.48,  -0.50,  -0.68,  -0.68,   0.44,   0.50,  -0.64,
           -0.10,  -0.64,  -0.10,  -0.40,   0.50,   0.40,   0.50,   0.40,
            0.50,   0.00,   0.00,  -0.40,  -0.50,  -0.36,  -0.50,   0.36,
           -0.50,   0.60,  -0.60,   0.40,  -0.40,   0.40,   0.40,  -0.40,
            0.40,  -0.40,   0.40,  -0.56,  -0.56,   0.36,  -0.40,  -0.36,
            0.40,   0.36,  -0.40,  -0.36,  -0.40,   0.36,   0.40,   0.36,
            0.40,  -0.52,   0.52,   0.52,   0.32,   0.40,  -0.32,   0.40,
           -0.32,   0.40,  -0.32,   0.40,   0.32,  -0.40,  -0.32,  -0.40,
            0.32,  -0.40,   0.28,  -0.40,  -0.28,   0.40,   0.28,  -0.40,
            0.28,   0.40,   0.48,  -0.48,   0.48,   0.36,  -0.30,  -0.36,
           -0.30,   0.00,   0.00,   0.20,   0.40,  -0.44,   0.44,  -0.44,
           -0.44,  -0.44,  -0.44,   0.32,  -0.30,   0.32,   0.30,   0.24,
            0.30,  -0.12,  -0.10,  -0.28,   0.30,   0.28,   0.30,   0.28,
            0.30,   0.28,  -0.30,   0.28,  -0.30,   0.28,  -0.30,   0.28,

       /* 2132-2259 */
            0.30,  -0.28,   0.30,   0.40,   0.40,  -0.24,   0.30,   0.24,
           -0.30,   0.24,  -0.30,  -0.24,  -0.30,   0.24,   0.30,   0.24,
           -0.30,  -0.24,   0.30,   0.24,  -0.30,  -0.24,  -0.30,   0.24,
           -0.30,   0.24,   0.30,  -0.24,   0.30,  -0.24,   0.30,   0.20,
           -0.30,   0.20,  -0.30,   0.20,  -0.30,   0.20,   0.30,   0.20,
           -0.30,   0.20,  -0.30,   0.20,   0.30,   0.20,   0.30,  -0.20,
           -0.30,   0.20,  -0.30,   0.20,  -0.30,  -0.36,  -0.36,  -0.36,
           -0.04,   0.30,   0.12,  -0.10,  -0.32,  -0.24,   0.20,   0.24,
            0.20,   0.20,  -0.20,  -0.20,  -0.20,  -0.20,  -0.20,   0.20,
            0.20,   0.20,  -0.20,   0.20,   0.20,   0.20,   0.20,  -0.20,
           -0.20,   0.00,   0.00,  -0.20,  -0.20,  -0.20,   0.20,  -0.20,
            0.20,   0.20,  -0.20,  -0.20,  -0.20,   0.20,   0.20,   0.20,
            0.20,   0.20,  -0.20,   0.20,  -0.20,   0.28,   0.28,   0.28,
            0.28,   0.28,   0.28,  -0.28,   0.28,   0.12,   0.00,   0.24,
            0.16,  -0.20,   0.16,  -0.20,   0.16,  -0.20,   0.16,   0.20,
           -0.16,   0.20,   0.16,   0.20,  -0.16,   0.20,  -0.16,   0.20,

       /* 2260-2387 */
           -0.16,   0.20,   0.16,  -0.20,   0.16,   0.20,   0.16,  -0.20,
           -0.16,   0.20,  -0.16,  -0.20,  -0.16,   0.20,   0.16,   0.20,
            0.16,  -0.20,   0.16,  -0.20,   0.16,   0.20,   0.16,   0.20,
            0.16,   0.20,  -0.16,  -0.20,   0.16,   0.20,  -0.16,   0.20,
            0.16,   0.20,  -0.16,  -0.20,   0.16,  -0.20,   0.16,  -0.20,
           -0.16,  -0.20,   0.24,  -0.24,  -0.24,   0.24,   0.24,   0.12,
            0.20,   0.12,   0.20,  -0.12,  -0.20,   0.12,  -0.20,   0.12,
           -0.20,  -0.12,   0.20,  -0.12,   0.20,  -0.12,  -0.20,   0.12,
            0.20,   0.12,   0.20,   0.12,  -0.20,  -0.12,   0.20,   0.12,
           -0.20,  -0.12,   0.20,   0.12,   0.20,   0.00,   0.00,  -0.12,
            0.20,  -0.12,   0.20,   0.12,  -0.20,  -0.12,   0.20,   0.12,
            0.20,   0.00,  -0.21,  -0.20,   0.00,   0.00,   0.20,  -0.20,
           -0.20,  -0.20,   0.20,  -0.16,  -0.10,   0.00,   0.17,   0.16,
            0.16,   0.16,   0.16,  -0.16,   0.16,   0.16,  -0.16,   0.16,
           -0.16,   0.16,   0.12,   0.10,   0.12,  -0.10,  -0.12,   0.10,
           -0.12,   0.10,   0.12,  -0.10,  -0.12,   0.12,  -0.12,   0.12,

       /* 2388-2515 */
           -0.12,   0.12,  -0.12,  -0.12,  -0.12,  -0.12,  -0.12,  -0.12,
           -0.12,   0.12,   0.12,   0.12,   0.12,  -0.12,  -0.12,   0.12,
            0.12,   0.12,  -0.12,   0.12,  -0.12,  -0.12,  -0.12,   0.12,
           -0.12,  -0.12,   0.12,   0.00,   0.11,   0.11,-122.67, 164.70,
          203.78, 273.50,   3.58,   2.74,   6.18,  -4.56,   0.00,  -0.04,
            0.00,  -0.07,  57.44, -77.10,  95.82, 128.60,  -1.77,  -1.28,
            2.85,  -2.14,  82.14,  89.50,   0.00,   0.00,   2.00,  -1.84,
           -0.04,  47.73, -64.10,  23.79,  31.90,  -1.45,  -1.07,   0.69,
           -0.53, -46.38,  50.50,   0.00,   0.00,   1.13,   1.04,   0.02,
          -18.38,   0.00,  63.80,   0.00,   0.00,   0.41,   0.00,  -1.43,
           59.07,   0.00,   0.00,   0.00,   0.00,  -1.32,  57.28,   0.00,
            0.00,   0.00,   0.00,  -1.28, -48.65,   0.00,  -1.15,   0.00,
            0.00,   1.09,   0.00,   0.03, -18.30,  24.60, -17.30, -23.20,
            0.56,   0.41,  -0.51,   0.39, -16.91,  26.90,   8.43,  13.30,
            0.60,   0.38,   0.31,  -0.19,   1.23,  -1.70, -19.13, -25.70,
           -0.03,  -0.03,  -0.58,   0.43,  -0.72,   0.90, -17.34, -23.30,

       /* 2516-2643 */
            0.03,   0.02,  -0.52,   0.39, -19.49, -21.30,   0.00,   0.00,
           -0.48,   0.44,   0.01,  20.57, -20.10,   0.64,   0.70,  -0.45,
           -0.46,   0.00,  -0.01,   4.89,   5.90, -16.55,  19.90,   0.14,
           -0.11,   0.44,   0.37,  18.22,  19.80,   0.00,   0.00,   0.44,
           -0.41,  -0.01,   4.89,  -5.30, -16.51, -18.00,  -0.11,  -0.11,
           -0.41,   0.37, -17.86,   0.00,  17.10,   0.00,   0.00,   0.40,
            0.00,  -0.38,   0.32,   0.00,  24.42,   0.00,   0.00,  -0.01,
            0.00,  -0.55, -23.79,   0.00,   0.00,   0.00,   0.00,   0.53,
           14.72, -16.00,  -0.32,   0.00,  -0.36,  -0.33,  -0.01,   0.01,
            3.34,  -4.50,  11.86,  15.90,  -0.11,  -0.07,   0.35,  -0.27,
           -3.26,   4.40,  11.62,  15.60,   0.09,   0.07,   0.35,  -0.26,
          -19.53,   0.00,   5.09,   0.00,   0.00,   0.44,   0.00,  -0.11,
          -13.48,  14.70,   0.00,   0.00,   0.33,   0.30,   0.01,  10.86,
          -14.60,   3.18,   4.30,  -0.33,  -0.24,   0.09,  -0.07, -11.30,
          -15.10,   0.00,   0.00,  -0.34,   0.25,   0.01,   2.03,  -2.70,
           10.82,  14.50,  -0.07,  -0.05,   0.32,  -0.24,  17.46,   0.00,

       /* 2644-2771 */
            0.00,   0.00,   0.00,  -0.39,  16.43,   0.00,   0.52,   0.00,
            0.00,  -0.37,   0.00,  -0.01,   9.35,   0.00,  13.29,   0.00,
            0.00,  -0.21,   0.00,  -0.30, -10.42,  11.40,   0.00,   0.00,
            0.25,   0.23,   0.01,   0.44,   0.50, -10.38,  11.30,   0.02,
           -0.01,   0.25,   0.23, -14.64,   0.00,   0.00,   0.00,   0.00,
            0.33,   0.56,   0.80,  -8.67,  11.70,   0.02,  -0.01,   0.26,
            0.19,  13.88,   0.00,  -2.47,   0.00,   0.00,  -0.31,   0.00,
            0.06,  -1.99,   2.70,   7.72,  10.30,   0.06,   0.04,   0.23,
           -0.17,  -0.20,   0.00,  13.05,   0.00,   0.00,   0.00,   0.00,
           -0.29,   6.92,  -9.30,   3.34,   4.50,  -0.21,  -0.15,   0.10,
           -0.07,  -6.60,   0.00,  10.70,   0.00,   0.00,   0.15,   0.00,
           -0.24,  -8.04,  -8.70,   0.00,   0.00,  -0.19,   0.18, -10.58,
            0.00,  -3.10,   0.00,   0.00,   0.24,   0.00,   0.07,  -7.32,
            8.00,  -0.12,  -0.10,   0.18,   0.16,   1.63,   1.70,   6.96,
           -7.60,   0.03,  -0.04,  -0.17,  -0.16,  -3.62,   0.00,   9.86,
            0.00,   0.00,   0.08,   0.00,  -0.22,   0.20,  -0.20,  -6.88,

       /* 2772-2899 */
           -7.50,   0.00,   0.00,  -0.17,   0.15,  -8.99,   0.00,   4.02,
            0.00,   0.00,   0.20,   0.00,  -0.09,  -1.07,   1.40,  -5.69,
           -7.70,   0.03,   0.02,  -0.17,   0.13,   6.48,  -7.20,  -0.48,
           -0.50,  -0.16,  -0.14,  -0.01,   0.01,   5.57,  -7.50,   1.07,
            1.40,  -0.17,  -0.12,   0.03,  -0.02,   8.71,   0.00,   3.54,
            0.00,   0.00,  -0.19,   0.00,  -0.08,   0.40,   0.00,   9.27,
            0.00,   0.00,  -0.01,   0.00,  -0.21,  -6.13,   6.70,  -1.19,
           -1.30,   0.15,   0.14,  -0.03,   0.03,   5.21,  -5.70,  -2.51,
           -2.60,  -0.13,  -0.12,  -0.06,   0.06,   5.69,  -6.20,  -0.12,
           -0.10,  -0.14,  -0.13,  -0.01,   2.03,  -2.70,   4.53,   6.10,
           -0.06,  -0.05,   0.14,  -0.10,   5.01,   5.50,  -2.51,   2.70,
            0.12,  -0.11,   0.06,   0.06,  -1.91,   2.60,  -4.38,  -5.90,
            0.06,   0.04,  -0.13,   0.10,   4.65,  -6.30,   0.00,   0.00,
           -0.14,  -0.10,  -5.29,   5.70,   0.00,   0.00,   0.13,   0.12,
           -2.23,  -4.00,  -4.65,   4.20,  -0.09,   0.05,   0.10,   0.10,
           -4.53,   6.10,   0.00,   0.00,   0.14,   0.10,   2.47,   2.70,

       /* 2900-3027 */
           -4.46,   4.90,   0.06,  -0.06,   0.11,   0.10,  -5.05,   5.50,
            0.84,   0.90,   0.12,   0.11,   0.02,  -0.02,   4.97,  -5.40,
           -1.71,   0.00,  -0.12,  -0.11,   0.00,   0.04,  -0.99,  -1.30,
            4.22,  -5.70,  -0.03,   0.02,  -0.13,  -0.09,   0.99,   1.40,
            4.22,  -5.60,   0.03,  -0.02,  -0.13,  -0.09,  -4.69,  -5.20,
            0.00,   0.00,  -0.12,   0.10,  -3.42,   0.00,   6.09,   0.00,
            0.00,   0.08,   0.00,  -0.14,  -4.65,  -5.10,   0.00,   0.00,
           -0.11,   0.10,   0.00,   0.00,  -4.53,  -5.00,   0.00,   0.00,
           -0.11,   0.10,  -2.43,  -2.70,  -3.82,   4.20,  -0.06,   0.05,
            0.10,   0.09,   0.00,   0.00,  -4.53,   4.90,   0.00,   0.00,
            0.11,   0.10,  -4.49,  -4.90,   0.00,   0.00,  -0.11,   0.10,
            2.67,  -2.90,  -3.62,  -3.90,  -0.06,  -0.06,  -0.09,   0.08,
            3.94,  -5.30,   0.00,   0.00,  -0.12,  -3.38,   3.70,  -2.78,
           -3.10,   0.08,   0.08,  -0.07,   0.06,   3.18,  -3.50,  -2.82,
           -3.10,  -0.08,  -0.07,  -0.07,   0.06,  -5.77,   0.00,   1.87,
            0.00,   0.00,   0.13,   0.00,  -0.04,   3.54,  -4.80,  -0.64,

       /* 3028-3155 */
           -0.90,  -0.11,   0.00,  -0.02,  -3.50,  -4.70,   0.68,  -0.90,
           -0.11,   0.00,  -0.02,   5.49,   0.00,   0.00,   0.00,   0.00,
           -0.12,   1.83,  -2.50,   2.63,   3.50,  -0.06,   0.00,   0.08,
            3.02,  -4.10,   0.68,   0.90,  -0.09,   0.00,   0.02,   0.00,
            0.00,   5.21,   0.00,   0.00,   0.00,   0.00,  -0.12,  -3.54,
            3.80,   2.70,   3.60,  -1.35,   1.80,   0.08,   0.00,   0.04,
           -2.90,   3.90,   0.68,   0.90,   0.09,   0.00,   0.02,   0.80,
           -1.10,  -2.78,  -3.70,  -0.02,   0.00,  -0.08,   4.10,   0.00,
           -2.39,   0.00,   0.00,  -0.09,   0.00,   0.05,  -1.59,   2.10,
            2.27,   3.00,   0.05,   0.00,   0.07,  -2.63,   3.50,  -0.48,
           -0.60,  -2.94,  -3.20,  -2.94,   3.20,   2.27,  -3.00,  -1.11,
           -1.50,  -0.07,   0.00,  -0.03,  -0.56,  -0.80,  -2.35,   3.10,
            0.00,  -0.60,  -3.42,   1.90,  -0.12,  -0.10,   2.63,  -2.90,
            2.51,   2.80,  -0.64,   0.70,  -0.48,  -0.60,   2.19,  -2.90,
            0.24,  -0.30,   2.15,   2.90,   2.15,  -2.90,   0.52,   0.70,
            2.07,  -2.80,  -3.10,   0.00,   1.79,   0.00,   0.00,   0.07,

       /* 3156-3283 */
            0.00,  -0.04,   0.88,   0.00,  -3.46,   2.11,   2.80,  -0.36,
            0.50,   3.54,  -0.20,  -3.50,  -1.39,   1.50,  -1.91,  -2.10,
           -1.47,   2.00,   1.39,   1.90,   2.07,  -2.30,   0.91,   1.00,
            1.99,  -2.70,   3.30,   0.00,   0.60,  -0.44,  -0.70,  -1.95,
            2.60,   2.15,  -2.40,  -0.60,  -0.70,   3.30,   0.84,   0.00,
           -3.10,  -3.10,   0.00,  -0.72,  -0.32,   0.40,  -1.87,  -2.50,
            1.87,  -2.50,   0.32,   0.40,  -0.24,   0.30,  -1.87,  -2.50,
           -0.24,  -0.30,   1.87,  -2.50,  -2.70,   0.00,   1.55,   2.03,
            2.20,  -2.98,  -1.99,  -2.20,   0.12,  -0.10,  -0.40,   0.50,
            1.59,   2.10,   0.00,   0.00,  -1.79,   2.00,  -1.03,   1.40,
           -1.15,  -1.60,   0.32,   0.50,   1.39,  -1.90,   2.35,  -1.27,
            1.70,   0.60,   0.80,  -0.32,  -0.40,   1.35,  -1.80,   0.44,
            0.00,   2.23,  -0.84,   0.90,  -1.27,  -1.40,  -1.47,   1.60,
           -0.28,  -0.30,  -0.28,   0.40,  -1.27,  -1.70,   0.28,  -0.40,
           -1.43,  -1.50,   0.00,   0.00,  -1.27,  -1.70,   2.11,  -0.32,
           -0.40,  -1.23,   1.60,   1.19,  -1.30,  -0.72,  -0.80,   0.72,

       /* 3284-3411 */
           -0.80,  -1.15,  -1.30,  -1.35,  -1.50,  -1.19,  -1.60,  -0.12,
            0.20,   1.79,   0.00,  -0.88,  -0.28,   0.40,   1.11,   1.50,
           -1.83,   0.00,   0.56,  -0.12,   0.10,  -1.27,  -1.40,   0.00,
            0.00,   1.15,   1.50,  -0.12,   0.20,   1.11,   1.50,   0.36,
           -0.50,  -1.07,  -1.40,  -1.11,   1.50,   1.67,   0.00,   0.80,
           -1.11,   0.00,   1.43,   1.23,  -1.30,  -0.24,  -1.19,  -1.30,
           -0.24,   0.20,  -0.44,  -0.90,  -0.95,   1.10,   1.07,  -1.40,
            1.15,  -1.30,   1.03,  -1.10,  -0.56,  -0.60,  -0.68,   0.90,
           -0.76,  -1.00,  -0.24,  -0.30,   0.95,  -1.30,   0.56,   0.70,
            0.84,  -1.10,  -0.56,   0.00,  -1.55,   0.91,  -1.30,   0.28,
            0.30,   0.16,  -0.20,   0.95,   1.30,   0.40,  -0.50,  -0.88,
           -1.20,   0.95,  -1.10,  -0.48,  -0.50,   0.00,   0.00,  -1.07,
            1.20,   0.44,  -0.50,   0.95,   1.10,   0.00,   0.00,   0.92,
           -1.30,   0.95,   1.00,  -0.52,   0.60,   1.59,   0.24,  -0.40,
            0.91,   1.20,   0.84,  -1.10,  -0.44,  -0.60,   0.84,   1.10,
           -0.44,   0.60,  -0.44,   0.60,  -0.84,  -1.10,  -0.80,   0.00,

       /* 3412-3539 */
            1.35,   0.76,   0.20,  -0.91,  -1.00,   0.20,  -0.30,  -0.91,
           -1.20,  -0.95,   1.00,  -0.48,  -0.50,   0.88,   1.00,   0.48,
           -0.50,  -0.95,  -1.10,   0.20,  -0.20,  -0.99,   1.10,  -0.84,
            1.10,  -0.24,  -0.30,   0.20,  -0.30,   0.84,   1.10,  -1.39,
            0.00,  -0.28,  -0.16,   0.20,   0.84,   1.10,   0.00,   0.00,
            1.39,   0.00,   0.00,  -0.95,   1.00,   1.35,  -0.99,   0.00,
            0.88,  -0.52,   0.00,  -1.19,   0.20,   0.20,   0.76,  -1.00,
            0.00,   0.00,   0.76,   1.00,   0.00,   0.00,   0.76,   1.00,
           -0.76,   1.00,   0.00,   0.00,   1.23,   0.76,   0.80,  -0.32,
            0.40,  -0.72,   0.80,  -0.40,  -0.40,   0.00,   0.00,  -0.80,
           -0.90,  -0.68,   0.90,  -0.16,  -0.20,  -0.16,  -0.20,   0.68,
           -0.90,  -0.36,   0.50,  -0.56,  -0.80,   0.72,  -0.90,   0.44,
           -0.60,  -0.48,  -0.70,  -0.16,   0.00,  -1.11,   0.32,   0.00,
           -1.07,   0.60,  -0.80,  -0.28,  -0.40,  -0.64,   0.00,   0.91,
            1.11,   0.64,  -0.90,   0.76,  -0.80,   0.00,   0.00,  -0.76,
           -0.80,   1.03,   0.00,  -0.36,  -0.64,  -0.70,   0.36,  -0.40,

       /* 3540-3667 */
            1.07,   0.36,  -0.50,  -0.52,  -0.70,   0.60,   0.00,   0.88,
            0.95,   0.00,   0.48,   0.16,  -0.20,   0.60,   0.80,   0.16,
           -0.20,  -0.60,  -0.80,   0.00,  -1.00,   0.12,   0.20,   0.16,
           -0.20,   0.68,   0.70,   0.59,  -0.80,  -0.99,  -0.56,  -0.60,
            0.36,  -0.40,  -0.68,  -0.70,  -0.68,  -0.70,  -0.36,  -0.50,
           -0.44,   0.60,   0.64,   0.70,  -0.12,   0.10,  -0.52,   0.60,
            0.36,   0.40,   0.00,   0.00,   0.95,  -0.84,   0.00,   0.44,
            0.56,   0.60,   0.32,  -0.30,   0.00,   0.00,   0.60,   0.70,
            0.00,   0.00,   0.60,   0.70,  -0.12,  -0.20,   0.52,  -0.70,
            0.00,   0.00,   0.56,   0.70,  -0.12,   0.10,  -0.52,  -0.70,
            0.00,   0.00,   0.88,  -0.76,   0.00,  -0.44,   0.00,   0.00,
           -0.52,  -0.70,   0.52,  -0.70,   0.36,  -0.40,  -0.44,  -0.50,
            0.00,   0.00,   0.60,   0.60,   0.84,   0.00,   0.12,  -0.24,
            0.00,   0.80,  -0.56,   0.60,  -0.32,  -0.30,   0.48,  -0.50,
            0.28,  -0.30,  -0.48,  -0.50,   0.12,   0.20,   0.48,  -0.60,
            0.48,   0.60,  -0.12,   0.20,   0.24,   0.00,   0.76,  -0.52,

       /* 3668-3795 */
           -0.60,  -0.52,   0.60,   0.48,  -0.50,  -0.24,  -0.30,   0.12,
           -0.10,   0.48,   0.60,   0.52,  -0.20,   0.36,   0.40,  -0.44,
            0.50,  -0.24,  -0.30,  -0.48,  -0.60,  -0.44,  -0.60,  -0.12,
            0.10,   0.76,   0.76,   0.20,  -0.20,   0.48,   0.50,   0.40,
           -0.50,  -0.24,  -0.30,   0.44,  -0.60,   0.44,  -0.60,   0.36,
            0.00,  -0.64,   0.72,   0.00,  -0.12,   0.00,  -0.10,  -0.40,
           -0.60,  -0.20,  -0.20,  -0.44,   0.50,  -0.44,   0.50,   0.20,
            0.20,  -0.44,  -0.50,   0.20,  -0.20,  -0.20,   0.20,  -0.44,
           -0.50,   0.64,   0.00,   0.32,  -0.36,   0.50,  -0.20,  -0.30,
            0.12,  -0.10,   0.48,   0.50,  -0.12,   0.30,  -0.36,  -0.50,
            0.00,   0.00,   0.48,   0.50,  -0.48,   0.50,   0.68,   0.00,
           -0.12,   0.56,  -0.40,   0.44,  -0.50,  -0.12,  -0.10,   0.24,
            0.30,  -0.40,   0.40,   0.64,   0.00,  -0.24,   0.64,   0.00,
           -0.20,   0.00,   0.00,   0.44,  -0.50,   0.44,   0.50,  -0.12,
            0.20,  -0.36,  -0.50,   0.12,   0.00,   0.64,  -0.40,   0.50,
            0.00,   0.10,   0.00,   0.00,  -0.40,   0.50,   0.00,   0.00,

       /* 3796-3923 */
           -0.40,  -0.50,   0.56,   0.00,   0.28,   0.00,   0.10,   0.36,
            0.50,   0.00,  -0.10,   0.36,  -0.50,   0.36,   0.50,   0.00,
           -0.10,   0.24,  -0.20,  -0.36,  -0.40,   0.16,   0.20,   0.40,
           -0.40,   0.00,   0.00,  -0.36,  -0.50,  -0.36,  -0.50,  -0.32,
           -0.50,  -0.12,   0.10,   0.20,   0.20,  -0.36,   0.40,  -0.60,
            0.60,   0.28,   0.00,   0.52,   0.12,  -0.10,   0.40,   0.40,
            0.00,  -0.50,   0.20,  -0.20,  -0.32,   0.40,   0.16,   0.20,
           -0.16,   0.20,   0.32,   0.40,   0.56,   0.00,  -0.12,   0.32,
           -0.40,  -0.16,  -0.20,   0.00,   0.00,   0.40,   0.40,  -0.40,
           -0.40,  -0.40,   0.40,  -0.36,   0.40,   0.12,   0.10,   0.00,
            0.10,   0.36,   0.40,   0.00,  -0.10,   0.36,   0.40,  -0.36,
            0.40,   0.00,   0.10,   0.32,   0.00,   0.44,   0.12,   0.20,
            0.28,  -0.40,   0.00,   0.00,   0.36,   0.40,   0.32,  -0.40,
           -0.16,   0.12,   0.10,   0.32,  -0.40,   0.20,   0.30,  -0.24,
            0.30,   0.00,   0.10,   0.32,   0.40,   0.00,  -0.10,  -0.32,
           -0.40,  -0.32,   0.40,   0.00,   0.10,  -0.52,  -0.52,   0.52,

       /* 3924-4051 */
            0.32,  -0.40,   0.00,   0.00,   0.32,   0.40,   0.32,  -0.40,
            0.00,   0.00,  -0.32,  -0.40,  -0.32,   0.40,   0.32,   0.40,
            0.00,   0.00,   0.32,   0.40,   0.00,   0.00,  -0.32,  -0.40,
            0.00,   0.00,   0.32,   0.40,   0.16,   0.20,   0.32,  -0.30,
           -0.16,   0.00,  -0.48,  -0.20,   0.20,  -0.28,  -0.30,   0.28,
           -0.40,   0.00,   0.00,   0.28,  -0.40,   0.00,   0.00,   0.28,
           -0.40,   0.00,   0.00,  -0.28,  -0.40,   0.28,   0.40,  -0.28,
           -0.40,  -0.48,  -0.20,   0.20,   0.24,   0.30,   0.44,   0.00,
            0.16,   0.24,   0.30,   0.16,  -0.20,   0.24,   0.30,  -0.12,
            0.20,   0.20,   0.30,  -0.16,   0.20,   0.00,   0.00,   0.44,
           -0.32,   0.30,   0.24,   0.00,  -0.36,   0.36,   0.00,   0.24,
            0.12,  -0.20,   0.20,   0.30,  -0.12,   0.00,  -0.28,   0.30,
           -0.24,   0.30,   0.12,   0.10,  -0.28,  -0.30,  -0.28,   0.30,
            0.00,   0.00,  -0.28,  -0.30,   0.00,   0.00,  -0.28,  -0.30,
            0.00,   0.00,   0.28,   0.30,   0.00,   0.00,  -0.28,  -0.30,
           -0.28,   0.30,   0.00,   0.00,  -0.28,  -0.30,   0.00,   0.00,

       /* 4052-4179 */
            0.28,   0.30,   0.00,   0.00,  -0.28,   0.30,   0.28,  -0.30,
           -0.28,   0.30,   0.40,   0.40,  -0.24,   0.30,   0.00,  -0.10,
            0.16,   0.00,   0.36,  -0.20,   0.30,  -0.12,  -0.10,  -0.24,
           -0.30,   0.00,   0.00,  -0.24,   0.30,  -0.24,   0.30,   0.00,
            0.00,  -0.24,   0.30,  -0.24,   0.30,   0.24,  -0.30,   0.00,
            0.00,   0.24,  -0.30,   0.00,   0.00,   0.24,   0.30,   0.24,
           -0.30,   0.24,   0.30,  -0.24,   0.30,  -0.24,   0.30,  -0.20,
            0.20,  -0.16,  -0.20,   0.00,   0.00,  -0.32,   0.20,   0.00,
            0.10,   0.20,  -0.30,   0.20,  -0.20,   0.12,   0.20,  -0.16,
            0.20,   0.16,   0.20,   0.20,   0.30,   0.20,   0.30,   0.00,
            0.00,  -0.20,   0.30,   0.00,   0.00,   0.20,   0.30,  -0.20,
           -0.30,  -0.20,  -0.30,   0.20,  -0.30,   0.00,   0.00,   0.20,
            0.30,   0.00,   0.00,   0.20,   0.30,   0.00,   0.00,   0.20,
            0.30,   0.00,   0.00,   0.20,   0.30,   0.00,   0.00,   0.20,
           -0.30,   0.00,   0.00,  -0.20,  -0.30,   0.00,   0.00,  -0.20,
            0.30,   0.00,   0.00,  -0.20,   0.30,   0.00,   0.00,   0.36,

       /* 4180-4307 */
            0.00,   0.00,   0.36,   0.12,   0.10,  -0.24,   0.20,   0.12,
           -0.20,  -0.16,  -0.20,  -0.13,   0.10,   0.22,   0.21,   0.20,
            0.00,  -0.28,   0.32,   0.00,  -0.12,  -0.20,  -0.20,   0.12,
           -0.10,   0.12,   0.10,  -0.20,   0.20,   0.00,   0.00,  -0.32,
            0.32,   0.00,   0.00,   0.32,   0.32,   0.00,   0.00,  -0.24,
           -0.20,   0.24,   0.20,   0.20,   0.00,  -0.24,   0.00,   0.00,
           -0.24,  -0.20,   0.00,   0.00,   0.24,   0.20,  -0.24,  -0.20,
            0.00,   0.00,  -0.24,   0.20,   0.16,  -0.20,   0.12,   0.10,
            0.20,   0.20,   0.00,  -0.10,  -0.12,   0.10,  -0.16,  -0.20,
           -0.12,  -0.10,  -0.16,   0.20,   0.20,   0.20,   0.00,   0.00,
           -0.20,   0.20,  -0.20,   0.20,  -0.20,   0.20,  -0.20,   0.20,
            0.20,  -0.20,  -0.20,  -0.20,   0.00,   0.00,  -0.20,   0.20,
            0.20,   0.00,  -0.20,   0.00,   0.00,  -0.20,   0.20,  -0.20,
            0.20,  -0.20,  -0.20,  -0.20,  -0.20,   0.00,   0.00,   0.20,
            0.20,   0.20,   0.20,   0.12,  -0.20,  -0.12,  -0.10,   0.28,
           -0.28,   0.16,  -0.20,   0.00,  -0.10,   0.00,   0.10,  -0.16,

       /* 4308-4435 */
            0.20,   0.00,  -0.10,  -0.16,  -0.20,   0.00,  -0.10,   0.16,
           -0.20,   0.16,  -0.20,   0.00,   0.00,   0.16,   0.20,  -0.16,
            0.20,   0.00,   0.00,   0.16,   0.20,   0.16,  -0.20,   0.16,
           -0.20,  -0.16,   0.20,   0.16,  -0.20,   0.00,   0.00,   0.16,
            0.20,   0.00,   0.00,   0.16,   0.20,   0.00,   0.00,  -0.16,
           -0.20,   0.16,  -0.20,  -0.16,  -0.20,   0.00,   0.00,  -0.16,
           -0.20,   0.00,   0.00,  -0.16,   0.20,   0.00,   0.00,   0.16,
           -0.20,   0.16,   0.20,   0.16,   0.20,   0.00,   0.00,  -0.16,
           -0.20,   0.00,   0.00,  -0.16,  -0.20,   0.00,   0.00,   0.16,
            0.20,   0.16,   0.20,   0.00,   0.00,   0.16,   0.20,   0.16,
           -0.20,   0.16,   0.20,   0.00,   0.00,  -0.16,   0.20,   0.00,
            0.10,   0.12,  -0.20,   0.12,  -0.20,   0.00,  -0.10,   0.00,
           -0.10,   0.12,   0.20,   0.00,  -0.10,  -0.12,   0.20,  -0.15,
            0.20,  -0.24,   0.24,   0.00,   0.00,   0.24,   0.24,   0.12,
           -0.20,  -0.12,  -0.20,   0.00,   0.00,   0.12,   0.20,   0.12,
           -0.20,   0.12,   0.20,   0.12,   0.20,   0.12,   0.20,   0.12,

       /* 4436-4563 */
           -0.20,  -0.12,   0.20,   0.00,   0.00,   0.12,   0.20,   0.12,
            0.00,  -0.20,   0.00,   0.00,  -0.12,  -0.20,   0.12,  -0.20,
            0.00,   0.00,   0.12,   0.20,  -0.12,   0.20,  -0.12,   0.20,
            0.12,  -0.20,   0.00,   0.00,   0.12,   0.20,   0.20,   0.00,
            0.12,   0.00,   0.00,  -0.12,   0.20,   0.00,   0.00,  -0.12,
           -0.20,   0.00,   0.00,  -0.12,  -0.20,  -0.12,  -0.20,   0.00,
            0.00,   0.12,  -0.20,   0.12,  -0.20,   0.12,   0.20,  -0.12,
           -0.20,   0.00,   0.00,   0.12,  -0.20,   0.12,  -0.20,   0.12,
            0.20,   0.12,   0.00,   0.20,  -0.12,  -0.20,   0.00,   0.00,
            0.12,   0.20,  -0.16,   0.00,   0.16,  -0.20,   0.20,   0.00,
            0.00,  -0.20,   0.00,   0.00,  -0.20,   0.20,   0.00,   0.00,
            0.20,   0.20,  -0.20,   0.00,   0.00,  -0.20,   0.12,   0.00,
           -0.16,   0.20,   0.00,   0.00,   0.20,   0.12,  -0.10,   0.00,
            0.10,   0.16,  -0.16,  -0.16,  -0.16,  -0.16,  -0.16,   0.00,
            0.00,  -0.16,   0.00,   0.00,  -0.16,  -0.16,  -0.16,   0.00,
            0.00,  -0.16,   0.00,   0.00,   0.16,   0.00,   0.00,   0.16,

       /* 4564-4691 */
            0.00,   0.00,   0.16,   0.16,   0.00,   0.00,  -0.16,   0.00,
            0.00,  -0.16,  -0.16,   0.00,   0.00,   0.16,   0.00,   0.00,
           -0.16,  -0.16,   0.00,   0.00,  -0.16,  -0.16,   0.12,   0.10,
            0.12,  -0.10,   0.12,   0.10,   0.00,   0.00,   0.12,   0.10,
           -0.12,   0.10,   0.00,   0.00,   0.12,   0.10,   0.12,  -0.10,
            0.00,   0.00,  -0.12,  -0.10,   0.00,   0.00,   0.12,   0.10,
            0.12,   0.00,   0.00,   0.12,   0.00,   0.00,  -0.12,   0.00,
            0.00,   0.12,   0.12,   0.12,   0.12,   0.12,   0.00,   0.00,
            0.12,   0.00,   0.00,   0.12,   0.12,   0.00,   0.00,   0.12,
            0.00,   0.00,   0.12,  -0.12,  -0.12,   0.12,   0.12,  -0.12,
           -0.12,   0.00,   0.00,   0.12,  -0.12,   0.12,   0.12,  -0.12,
           -0.12,   0.00,   0.00,  -0.12,  -0.12,   0.00,   0.00,  -0.12,
            0.12,   0.00,   0.00,   0.12,   0.00,   0.00,   0.12,   0.00,
            0.00,   0.12,  -0.12,   0.00,   0.00,  -0.12,   0.12,  -0.12,
           -0.12,   0.12,   0.00,   0.00,   0.12,   0.12,   0.12,  -0.12,
            0.00,   0.00,  -0.12,  -0.12,  -0.12,   0.00,   0.00,  -0.12,

       /* 4692-NA */
           -0.12,   0.00,   0.00,   0.12,   0.12,   0.00,   0.00,  -0.12,
           -0.12,  -0.12,  -0.12,   0.12,   0.00,   0.00,   0.12,  -0.12,
            0.00,   0.00,  -0.12,  -0.12,   0.00,   0.00,   0.12,  -0.12,
           -0.12,  -0.12,  -0.12,   0.12,   0.12,  -0.12,  -0.12,   0.00,
            0.00,  -0.12,   0.00,   0.00,  -0.12,   0.12,   0.00,   0.00,
            0.12,   0.00,   0.00,  -0.12,  -0.12,   0.00,   0.00,  -0.12,
           -0.12,   0.12,   0.00,   0.00,   0.12,   0.12,   0.00,   0.00,
            0.12,   0.00,   0.00,   0.12,   0.12,   0.08,   0.00,   0.04
       };

    /* Number of amplitude coefficients */
       static const int NA = (int) (sizeof a / sizeof (double));

    /* Amplitude usage: X or Y, sin or cos, power of T. */
       static const int jaxy[] = {0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1};
       static const int jasc[] = {0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0};
       static const int japt[] = {0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4};

    /* Miscellaneous */
       double t, w, pt[MAXPT+1], fa[14], xypr[2], xypl[2], xyls[2], arg,
              sc[2];
       int jpt, i, j, jxy, ialast, ifreq, m, ia, jsc;

    /*--------------------------------------------------------------------*/

    /* Interval between fundamental date J2000.0 and given date (JC). */
       t = ((date1 - JD_J2000) + date2) / JC;

    /* Powers of T. */
       w = 1.0;
       for (jpt = 0; jpt <= MAXPT; jpt++) {
          pt[jpt] = w;
          w *= t;
       }

    /* Initialize totals in X and Y:  polynomial, luni-solar, planetary. */
       for (jxy = 0; jxy < 2; jxy++) {
          xypr[jxy] = 0.0;
          xyls[jxy] = 0.0;
          xypl[jxy] = 0.0;
       }

    /* --------------------------------- */
    /* Fundamental arguments (IERS 2003) */
    /* --------------------------------- */

    /* Mean anomaly of the Moon. */
       fa[0] = iauFal03(t);

    /* Mean anomaly of the Sun. */
       fa[1] = iauFalp03(t);

    /* Mean argument of the latitude of the Moon. */
       fa[2] = iauFaf03(t);

    /* Mean elongation of the Moon from the Sun. */
       fa[3] = iauFad03(t);

    /* Mean longitude of the ascending node of the Moon. */
       fa[4] = iauFaom03(t);

    /* Planetary longitudes, Mercury through Neptune. */
       fa[5] = iauFame03(t);
       fa[6] = iauFave03(t);
       fa[7] = iauFae03(t);
       fa[8] = iauFama03(t);
       fa[9] = iauFaju03(t);
       fa[10] = iauFasa03(t);
       fa[11] = iauFaur03(t);
       fa[12] = iauFane03(t);

    /* General accumulated precession in longitude. */
       fa[13] = iauFapa03(t);

    /* -------------------------------------- */
    /* Polynomial part of precession-nutation */
    /* -------------------------------------- */

       for (jxy = 0; jxy < 2; jxy++) {
          for (j = MAXPT; j >= 0; j--) {
             xypr[jxy] += xyp[jxy][j] * pt[j];
          }
       }

    /* ---------------------------------- */
    /* Nutation periodic terms, planetary */
    /* ---------------------------------- */

    /* Work backwards through the coefficients per frequency list. */
       ialast = NA;
       for (ifreq = NFPL-1; ifreq >= 0; ifreq--) {

       /* Obtain the argument functions. */
          arg = 0.0;
          for (i = 0; i < 14; i++) {
             m = mfapl[ifreq][i];
             if (m != 0) arg += (double)m * fa[i];
          }
          sc[0] = std::sin(arg);
          sc[1] = std::cos(arg);

       /* Work backwards through the amplitudes at this frequency. */
          ia = nc[ifreq+NFLS];
          for (i = ialast; i >= ia; i--) {

          /* Coefficient number (0 = 1st). */
             j = i-ia;

          /* X or Y. */
             jxy = jaxy[j];

          /* Sin or cos. */
             jsc = jasc[j];

          /* Power of T. */
             jpt = japt[j];

          /* Accumulate the component. */
             xypl[jxy] += a[i-1] * sc[jsc] * pt[jpt];
          }
          ialast = ia-1;
       }

    /* ----------------------------------- */
    /* Nutation periodic terms, luni-solar */
    /* ----------------------------------- */

    /* Continue working backwards through the number of coefficients list. */
       for (ifreq = NFLS-1; ifreq >= 0; ifreq--) {

       /* Obtain the argument functions. */
          arg = 0.0;
          for (i = 0; i < 5; i++) {
             m = mfals[ifreq][i];
             if (m != 0) arg += (double)m * fa[i];
          }
          sc[0] = std::sin(arg);
          sc[1] = std::cos(arg);

       /* Work backwards through the amplitudes at this frequency. */
          ia = nc[ifreq];
          for (i = ialast; i >= ia; i--) {

          /* Coefficient number (0 = 1st). */
             j = i-ia;

          /* X or Y. */
             jxy = jaxy[j];

          /* Sin or cos. */
             jsc = jasc[j];

          /* Power of T. */
             jpt = japt[j];

          /* Accumulate the component. */
             xyls[jxy] += a[i-1] * sc[jsc] * pt[jpt];
          }
          ialast = ia-1;
       }

    /* ------------------------------------ */
    /* Results:  CIP unit vector components */
    /* ------------------------------------ */

       *x = AS_TO_RAD * (xypr[0] + (xyls[0] + xypl[0]) / 1e6);
       *y = AS_TO_RAD * (xypr[1] + (xyls[1] + xypl[1]) / 1e6);

       return;
    }



    void iauC2ixys(double x, double y, double s, Matrix<double>& rc2i)
    {
       double r2, e, d;


    /* Obtain the spherical angles E and d. */
       r2 = x*x + y*y;
       e = (r2 > 0.0) ? std::atan2(y, x) : 0.0;
       d = std::atan(std::sqrt(r2 / (1.0 - r2)));

    /* Form the matrix. */
       rc2i.resize(3,3,0.0);
       rc2i(0,0) = 1.0; rc2i(1,1) = 1.0; rc2i(2,2) = 1.0;
       iauRz(e, rc2i);
       iauRy(d, rc2i);
       iauRz(-(e+s), rc2i);

       return;
    }



    void iauNut00a(double date1, double date2, double *dpsi, double *deps)
    {
       int i;
       double t, el, elp, f, d, om, arg, dp, de, sarg, carg,
              al, af, ad, aom, alme, alve, alea, alma,
              alju, alsa, alur, alne, apa, dpsils, depsls,
              dpsipl, depspl;

    /* Units of 0.1 microarcsecond to radians */
       const double U2R = AS_TO_RAD / 1e7;

    /* ------------------------- */
    /* Luni-Solar nutation model */
    /* ------------------------- */

    /* The units for the sine and cosine coefficients are */
    /* 0.1 microarcsecond and the same per Julian century */

       static const struct {
          int nl,nlp,nf,nd,nom; /* coefficients of l,l',F,D,Om */
          double sp,spt,cp;     /* longitude sin, t*sin, cos coefficients */
          double ce,cet,se;     /* obliquity cos, t*cos, sin coefficients */
       } xls[] = {

       /* 1- 10 */
          { 0, 0, 0, 0, 1,
             -172064161.0, -174666.0, 33386.0, 92052331.0, 9086.0, 15377.0},
          { 0, 0, 2,-2, 2,
               -13170906.0, -1675.0, -13696.0, 5730336.0, -3015.0, -4587.0},
          { 0, 0, 2, 0, 2,-2276413.0,-234.0,2796.0,978459.0,-485.0, 1374.0},
          { 0, 0, 0, 0, 2,2074554.0, 207.0, -698.0,-897492.0,470.0, -291.0},
          { 0, 1, 0, 0, 0,1475877.0,-3633.0,11817.0,73871.0,-184.0,-1924.0},
          { 0, 1, 2,-2, 2,-516821.0,1226.0, -524.0,224386.0,-677.0, -174.0},
          { 1, 0, 0, 0, 0, 711159.0,  73.0, -872.0,  -6750.0,  0.0,  358.0},
          { 0, 0, 2, 0, 1,-387298.0,-367.0,  380.0, 200728.0, 18.0,  318.0},
          { 1, 0, 2, 0, 2,-301461.0, -36.0,  816.0, 129025.0,-63.0,  367.0},
          { 0,-1, 2,-2, 2, 215829.0,-494.0,  111.0, -95929.0,299.0,  132.0},

       /* 11-20 */
          { 0, 0, 2,-2, 1, 128227.0, 137.0,  181.0, -68982.0, -9.0,   39.0},
          {-1, 0, 2, 0, 2, 123457.0,  11.0,   19.0, -53311.0, 32.0,   -4.0},
          {-1, 0, 0, 2, 0, 156994.0,  10.0, -168.0,  -1235.0,  0.0,   82.0},
          { 1, 0, 0, 0, 1,  63110.0,  63.0,   27.0, -33228.0,  0.0,   -9.0},
          {-1, 0, 0, 0, 1, -57976.0, -63.0, -189.0,  31429.0,  0.0,  -75.0},
          {-1, 0, 2, 2, 2, -59641.0, -11.0,  149.0,  25543.0,-11.0,   66.0},
          { 1, 0, 2, 0, 1, -51613.0, -42.0,  129.0,  26366.0,  0.0,   78.0},
          {-2, 0, 2, 0, 1,  45893.0,  50.0,   31.0, -24236.0,-10.0,   20.0},
          { 0, 0, 0, 2, 0,  63384.0,  11.0, -150.0,  -1220.0,  0.0,   29.0},
          { 0, 0, 2, 2, 2, -38571.0,  -1.0,  158.0,  16452.0,-11.0,   68.0},

       /* 21-30 */
          { 0,-2, 2,-2, 2,  32481.0,   0.0,    0.0, -13870.0,  0.0,    0.0},
          {-2, 0, 0, 2, 0, -47722.0,   0.0,  -18.0,    477.0,  0.0,  -25.0},
          { 2, 0, 2, 0, 2, -31046.0,  -1.0,  131.0,  13238.0,-11.0,   59.0},
          { 1, 0, 2,-2, 2,  28593.0,   0.0,   -1.0, -12338.0, 10.0,   -3.0},
          {-1, 0, 2, 0, 1,  20441.0,  21.0,   10.0, -10758.0,  0.0,   -3.0},
          { 2, 0, 0, 0, 0,  29243.0,   0.0,  -74.0,   -609.0,  0.0,   13.0},
          { 0, 0, 2, 0, 0,  25887.0,   0.0,  -66.0,   -550.0,  0.0,   11.0},
          { 0, 1, 0, 0, 1, -14053.0, -25.0,   79.0,   8551.0, -2.0,  -45.0},
          {-1, 0, 0, 2, 1,  15164.0,  10.0,   11.0,  -8001.0,  0.0,   -1.0},
          { 0, 2, 2,-2, 2, -15794.0,  72.0,  -16.0,   6850.0,-42.0,   -5.0},

       /* 31-40 */
          { 0, 0,-2, 2, 0,  21783.0,   0.0,   13.0,   -167.0,  0.0,   13.0},
          { 1, 0, 0,-2, 1, -12873.0, -10.0,  -37.0,   6953.0,  0.0,  -14.0},
          { 0,-1, 0, 0, 1, -12654.0,  11.0,   63.0,   6415.0,  0.0,   26.0},
          {-1, 0, 2, 2, 1, -10204.0,   0.0,   25.0,   5222.0,  0.0,   15.0},
          { 0, 2, 0, 0, 0,  16707.0, -85.0,  -10.0,    168.0, -1.0,   10.0},
          { 1, 0, 2, 2, 2,  -7691.0,   0.0,   44.0,   3268.0,  0.0,   19.0},
          {-2, 0, 2, 0, 0, -11024.0,   0.0,  -14.0,    104.0,  0.0,    2.0},
          { 0, 1, 2, 0, 2,   7566.0, -21.0,  -11.0,  -3250.0,  0.0,   -5.0},
          { 0, 0, 2, 2, 1,  -6637.0, -11.0,   25.0,   3353.0,  0.0,   14.0},
          { 0,-1, 2, 0, 2,  -7141.0,  21.0,    8.0,   3070.0,  0.0,    4.0},

       /* 41-50 */
          { 0, 0, 0, 2, 1,  -6302.0, -11.0,    2.0,   3272.0,  0.0,    4.0},
          { 1, 0, 2,-2, 1,   5800.0,  10.0,    2.0,  -3045.0,  0.0,   -1.0},
          { 2, 0, 2,-2, 2,   6443.0,   0.0,   -7.0,  -2768.0,  0.0,   -4.0},
          {-2, 0, 0, 2, 1,  -5774.0, -11.0,  -15.0,   3041.0,  0.0,   -5.0},
          { 2, 0, 2, 0, 1,  -5350.0,   0.0,   21.0,   2695.0,  0.0,   12.0},
          { 0,-1, 2,-2, 1,  -4752.0, -11.0,   -3.0,   2719.0,  0.0,   -3.0},
          { 0, 0, 0,-2, 1,  -4940.0, -11.0,  -21.0,   2720.0,  0.0,   -9.0},
          {-1,-1, 0, 2, 0,   7350.0,   0.0,   -8.0,    -51.0,  0.0,    4.0},
          { 2, 0, 0,-2, 1,   4065.0,   0.0,    6.0,  -2206.0,  0.0,    1.0},
          { 1, 0, 0, 2, 0,   6579.0,   0.0,  -24.0,   -199.0,  0.0,    2.0},

       /* 51-60 */
          { 0, 1, 2,-2, 1,   3579.0,   0.0,    5.0,  -1900.0,  0.0,    1.0},
          { 1,-1, 0, 0, 0,   4725.0,   0.0,   -6.0,    -41.0,  0.0,    3.0},
          {-2, 0, 2, 0, 2,  -3075.0,   0.0,   -2.0,   1313.0,  0.0,   -1.0},
          { 3, 0, 2, 0, 2,  -2904.0,   0.0,   15.0,   1233.0,  0.0,    7.0},
          { 0,-1, 0, 2, 0,   4348.0,   0.0,  -10.0,    -81.0,  0.0,    2.0},
          { 1,-1, 2, 0, 2,  -2878.0,   0.0,    8.0,   1232.0,  0.0,    4.0},
          { 0, 0, 0, 1, 0,  -4230.0,   0.0,    5.0,    -20.0,  0.0,   -2.0},
          {-1,-1, 2, 2, 2,  -2819.0,   0.0,    7.0,   1207.0,  0.0,    3.0},
          {-1, 0, 2, 0, 0,  -4056.0,   0.0,    5.0,     40.0,  0.0,   -2.0},
          { 0,-1, 2, 2, 2,  -2647.0,   0.0,   11.0,   1129.0,  0.0,    5.0},

       /* 61-70 */
          {-2, 0, 0, 0, 1,  -2294.0,   0.0,  -10.0,   1266.0,  0.0,   -4.0},
          { 1, 1, 2, 0, 2,   2481.0,   0.0,   -7.0,  -1062.0,  0.0,   -3.0},
          { 2, 0, 0, 0, 1,   2179.0,   0.0,   -2.0,  -1129.0,  0.0,   -2.0},
          {-1, 1, 0, 1, 0,   3276.0,   0.0,    1.0,     -9.0,  0.0,    0.0},
          { 1, 1, 0, 0, 0,  -3389.0,   0.0,    5.0,     35.0,  0.0,   -2.0},
          { 1, 0, 2, 0, 0,   3339.0,   0.0,  -13.0,   -107.0,  0.0,    1.0},
          {-1, 0, 2,-2, 1,  -1987.0,   0.0,   -6.0,   1073.0,  0.0,   -2.0},
          { 1, 0, 0, 0, 2,  -1981.0,   0.0,    0.0,    854.0,  0.0,    0.0},
          {-1, 0, 0, 1, 0,   4026.0,   0.0, -353.0,   -553.0,  0.0, -139.0},
          { 0, 0, 2, 1, 2,   1660.0,   0.0,   -5.0,   -710.0,  0.0,   -2.0},

       /* 71-80 */
          {-1, 0, 2, 4, 2,  -1521.0,   0.0,    9.0,    647.0,  0.0,    4.0},
          {-1, 1, 0, 1, 1,   1314.0,   0.0,    0.0,   -700.0,  0.0,    0.0},
          { 0,-2, 2,-2, 1,  -1283.0,   0.0,    0.0,    672.0,  0.0,    0.0},
          { 1, 0, 2, 2, 1,  -1331.0,   0.0,    8.0,    663.0,  0.0,    4.0},
          {-2, 0, 2, 2, 2,   1383.0,   0.0,   -2.0,   -594.0,  0.0,   -2.0},
          {-1, 0, 0, 0, 2,   1405.0,   0.0,    4.0,   -610.0,  0.0,    2.0},
          { 1, 1, 2,-2, 2,   1290.0,   0.0,    0.0,   -556.0,  0.0,    0.0},
          {-2, 0, 2, 4, 2,  -1214.0,   0.0,    5.0,    518.0,  0.0,    2.0},
          {-1, 0, 4, 0, 2,   1146.0,   0.0,   -3.0,   -490.0,  0.0,   -1.0},
          { 2, 0, 2,-2, 1,   1019.0,   0.0,   -1.0,   -527.0,  0.0,   -1.0},

       /* 81-90 */
          { 2, 0, 2, 2, 2,  -1100.0,   0.0,    9.0,    465.0,  0.0,    4.0},
          { 1, 0, 0, 2, 1,   -970.0,   0.0,    2.0,    496.0,  0.0,    1.0},
          { 3, 0, 0, 0, 0,   1575.0,   0.0,   -6.0,    -50.0,  0.0,    0.0},
          { 3, 0, 2,-2, 2,    934.0,   0.0,   -3.0,   -399.0,  0.0,   -1.0},
          { 0, 0, 4,-2, 2,    922.0,   0.0,   -1.0,   -395.0,  0.0,   -1.0},
          { 0, 1, 2, 0, 1,    815.0,   0.0,   -1.0,   -422.0,  0.0,   -1.0},
          { 0, 0,-2, 2, 1,    834.0,   0.0,    2.0,   -440.0,  0.0,    1.0},
          { 0, 0, 2,-2, 3,   1248.0,   0.0,    0.0,   -170.0,  0.0,    1.0},
          {-1, 0, 0, 4, 0,   1338.0,   0.0,   -5.0,    -39.0,  0.0,    0.0},
          { 2, 0,-2, 0, 1,    716.0,   0.0,   -2.0,   -389.0,  0.0,   -1.0},

       /* 91-100 */
          {-2, 0, 0, 4, 0,   1282.0,   0.0,   -3.0,    -23.0,  0.0,    1.0},
          {-1,-1, 0, 2, 1,    742.0,   0.0,    1.0,   -391.0,  0.0,    0.0},
          {-1, 0, 0, 1, 1,   1020.0,   0.0,  -25.0,   -495.0,  0.0,  -10.0},
          { 0, 1, 0, 0, 2,    715.0,   0.0,   -4.0,   -326.0,  0.0,    2.0},
          { 0, 0,-2, 0, 1,   -666.0,   0.0,   -3.0,    369.0,  0.0,   -1.0},
          { 0,-1, 2, 0, 1,   -667.0,   0.0,    1.0,    346.0,  0.0,    1.0},
          { 0, 0, 2,-1, 2,   -704.0,   0.0,    0.0,    304.0,  0.0,    0.0},
          { 0, 0, 2, 4, 2,   -694.0,   0.0,    5.0,    294.0,  0.0,    2.0},
          {-2,-1, 0, 2, 0,  -1014.0,   0.0,   -1.0,      4.0,  0.0,   -1.0},
          { 1, 1, 0,-2, 1,   -585.0,   0.0,   -2.0,    316.0,  0.0,   -1.0},

       /* 101-110 */
          {-1, 1, 0, 2, 0,   -949.0,   0.0,    1.0,      8.0,  0.0,   -1.0},
          {-1, 1, 0, 1, 2,   -595.0,   0.0,    0.0,    258.0,  0.0,    0.0},
          { 1,-1, 0, 0, 1,    528.0,   0.0,    0.0,   -279.0,  0.0,    0.0},
          { 1,-1, 2, 2, 2,   -590.0,   0.0,    4.0,    252.0,  0.0,    2.0},
          {-1, 1, 2, 2, 2,    570.0,   0.0,   -2.0,   -244.0,  0.0,   -1.0},
          { 3, 0, 2, 0, 1,   -502.0,   0.0,    3.0,    250.0,  0.0,    2.0},
          { 0, 1,-2, 2, 0,   -875.0,   0.0,    1.0,     29.0,  0.0,    0.0},
          {-1, 0, 0,-2, 1,   -492.0,   0.0,   -3.0,    275.0,  0.0,   -1.0},
          { 0, 1, 2, 2, 2,    535.0,   0.0,   -2.0,   -228.0,  0.0,   -1.0},
          {-1,-1, 2, 2, 1,   -467.0,   0.0,    1.0,    240.0,  0.0,    1.0},

       /* 111-120 */
          { 0,-1, 0, 0, 2,    591.0,   0.0,    0.0,   -253.0,  0.0,    0.0},
          { 1, 0, 2,-4, 1,   -453.0,   0.0,   -1.0,    244.0,  0.0,   -1.0},
          {-1, 0,-2, 2, 0,    766.0,   0.0,    1.0,      9.0,  0.0,    0.0},
          { 0,-1, 2, 2, 1,   -446.0,   0.0,    2.0,    225.0,  0.0,    1.0},
          { 2,-1, 2, 0, 2,   -488.0,   0.0,    2.0,    207.0,  0.0,    1.0},
          { 0, 0, 0, 2, 2,   -468.0,   0.0,    0.0,    201.0,  0.0,    0.0},
          { 1,-1, 2, 0, 1,   -421.0,   0.0,    1.0,    216.0,  0.0,    1.0},
          {-1, 1, 2, 0, 2,    463.0,   0.0,    0.0,   -200.0,  0.0,    0.0},
          { 0, 1, 0, 2, 0,   -673.0,   0.0,    2.0,     14.0,  0.0,    0.0},
          { 0,-1,-2, 2, 0,    658.0,   0.0,    0.0,     -2.0,  0.0,    0.0},

       /* 121-130 */
          { 0, 3, 2,-2, 2,   -438.0,   0.0,    0.0,    188.0,  0.0,    0.0},
          { 0, 0, 0, 1, 1,   -390.0,   0.0,    0.0,    205.0,  0.0,    0.0},
          {-1, 0, 2, 2, 0,    639.0, -11.0,   -2.0,    -19.0,  0.0,    0.0},
          { 2, 1, 2, 0, 2,    412.0,   0.0,   -2.0,   -176.0,  0.0,   -1.0},
          { 1, 1, 0, 0, 1,   -361.0,   0.0,    0.0,    189.0,  0.0,    0.0},
          { 1, 1, 2, 0, 1,    360.0,   0.0,   -1.0,   -185.0,  0.0,   -1.0},
          { 2, 0, 0, 2, 0,    588.0,   0.0,   -3.0,    -24.0,  0.0,    0.0},
          { 1, 0,-2, 2, 0,   -578.0,   0.0,    1.0,      5.0,  0.0,    0.0},
          {-1, 0, 0, 2, 2,   -396.0,   0.0,    0.0,    171.0,  0.0,    0.0},
          { 0, 1, 0, 1, 0,    565.0,   0.0,   -1.0,     -6.0,  0.0,    0.0},

       /* 131-140 */
          { 0, 1, 0,-2, 1,   -335.0,   0.0,   -1.0,    184.0,  0.0,   -1.0},
          {-1, 0, 2,-2, 2,    357.0,   0.0,    1.0,   -154.0,  0.0,    0.0},
          { 0, 0, 0,-1, 1,    321.0,   0.0,    1.0,   -174.0,  0.0,    0.0},
          {-1, 1, 0, 0, 1,   -301.0,   0.0,   -1.0,    162.0,  0.0,    0.0},
          { 1, 0, 2,-1, 2,   -334.0,   0.0,    0.0,    144.0,  0.0,    0.0},
          { 1,-1, 0, 2, 0,    493.0,   0.0,   -2.0,    -15.0,  0.0,    0.0},
          { 0, 0, 0, 4, 0,    494.0,   0.0,   -2.0,    -19.0,  0.0,    0.0},
          { 1, 0, 2, 1, 2,    337.0,   0.0,   -1.0,   -143.0,  0.0,   -1.0},
          { 0, 0, 2, 1, 1,    280.0,   0.0,   -1.0,   -144.0,  0.0,    0.0},
          { 1, 0, 0,-2, 2,    309.0,   0.0,    1.0,   -134.0,  0.0,    0.0},

       /* 141-150 */
          {-1, 0, 2, 4, 1,   -263.0,   0.0,    2.0,    131.0,  0.0,    1.0},
          { 1, 0,-2, 0, 1,    253.0,   0.0,    1.0,   -138.0,  0.0,    0.0},
          { 1, 1, 2,-2, 1,    245.0,   0.0,    0.0,   -128.0,  0.0,    0.0},
          { 0, 0, 2, 2, 0,    416.0,   0.0,   -2.0,    -17.0,  0.0,    0.0},
          {-1, 0, 2,-1, 1,   -229.0,   0.0,    0.0,    128.0,  0.0,    0.0},
          {-2, 0, 2, 2, 1,    231.0,   0.0,    0.0,   -120.0,  0.0,    0.0},
          { 4, 0, 2, 0, 2,   -259.0,   0.0,    2.0,    109.0,  0.0,    1.0},
          { 2,-1, 0, 0, 0,    375.0,   0.0,   -1.0,     -8.0,  0.0,    0.0},
          { 2, 1, 2,-2, 2,    252.0,   0.0,    0.0,   -108.0,  0.0,    0.0},
          { 0, 1, 2, 1, 2,   -245.0,   0.0,    1.0,    104.0,  0.0,    0.0},

       /* 151-160 */
          { 1, 0, 4,-2, 2,    243.0,   0.0,   -1.0,   -104.0,  0.0,    0.0},
          {-1,-1, 0, 0, 1,    208.0,   0.0,    1.0,   -112.0,  0.0,    0.0},
          { 0, 1, 0, 2, 1,    199.0,   0.0,    0.0,   -102.0,  0.0,    0.0},
          {-2, 0, 2, 4, 1,   -208.0,   0.0,    1.0,    105.0,  0.0,    0.0},
          { 2, 0, 2, 0, 0,    335.0,   0.0,   -2.0,    -14.0,  0.0,    0.0},
          { 1, 0, 0, 1, 0,   -325.0,   0.0,    1.0,      7.0,  0.0,    0.0},
          {-1, 0, 0, 4, 1,   -187.0,   0.0,    0.0,     96.0,  0.0,    0.0},
          {-1, 0, 4, 0, 1,    197.0,   0.0,   -1.0,   -100.0,  0.0,    0.0},
          { 2, 0, 2, 2, 1,   -192.0,   0.0,    2.0,     94.0,  0.0,    1.0},
          { 0, 0, 2,-3, 2,   -188.0,   0.0,    0.0,     83.0,  0.0,    0.0},

       /* 161-170 */
          {-1,-2, 0, 2, 0,    276.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 2, 1, 0, 0, 0,   -286.0,   0.0,    1.0,      6.0,  0.0,    0.0},
          { 0, 0, 4, 0, 2,    186.0,   0.0,   -1.0,    -79.0,  0.0,    0.0},
          { 0, 0, 0, 0, 3,   -219.0,   0.0,    0.0,     43.0,  0.0,    0.0},
          { 0, 3, 0, 0, 0,    276.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 0, 0, 2,-4, 1,   -153.0,   0.0,   -1.0,     84.0,  0.0,    0.0},
          { 0,-1, 0, 2, 1,   -156.0,   0.0,    0.0,     81.0,  0.0,    0.0},
          { 0, 0, 0, 4, 1,   -154.0,   0.0,    1.0,     78.0,  0.0,    0.0},
          {-1,-1, 2, 4, 2,   -174.0,   0.0,    1.0,     75.0,  0.0,    0.0},
          { 1, 0, 2, 4, 2,   -163.0,   0.0,    2.0,     69.0,  0.0,    1.0},

       /* 171-180 */
          {-2, 2, 0, 2, 0,   -228.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          {-2,-1, 2, 0, 1,     91.0,   0.0,   -4.0,    -54.0,  0.0,   -2.0},
          {-2, 0, 0, 2, 2,    175.0,   0.0,    0.0,    -75.0,  0.0,    0.0},
          {-1,-1, 2, 0, 2,   -159.0,   0.0,    0.0,     69.0,  0.0,    0.0},
          { 0, 0, 4,-2, 1,    141.0,   0.0,    0.0,    -72.0,  0.0,    0.0},
          { 3, 0, 2,-2, 1,    147.0,   0.0,    0.0,    -75.0,  0.0,    0.0},
          {-2,-1, 0, 2, 1,   -132.0,   0.0,    0.0,     69.0,  0.0,    0.0},
          { 1, 0, 0,-1, 1,    159.0,   0.0,  -28.0,    -54.0,  0.0,   11.0},
          { 0,-2, 0, 2, 0,    213.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          {-2, 0, 0, 4, 1,    123.0,   0.0,    0.0,    -64.0,  0.0,    0.0},

       /* 181-190 */
          {-3, 0, 0, 0, 1,   -118.0,   0.0,   -1.0,     66.0,  0.0,    0.0},
          { 1, 1, 2, 2, 2,    144.0,   0.0,   -1.0,    -61.0,  0.0,    0.0},
          { 0, 0, 2, 4, 1,   -121.0,   0.0,    1.0,     60.0,  0.0,    0.0},
          { 3, 0, 2, 2, 2,   -134.0,   0.0,    1.0,     56.0,  0.0,    1.0},
          {-1, 1, 2,-2, 1,   -105.0,   0.0,    0.0,     57.0,  0.0,    0.0},
          { 2, 0, 0,-4, 1,   -102.0,   0.0,    0.0,     56.0,  0.0,    0.0},
          { 0, 0, 0,-2, 2,    120.0,   0.0,    0.0,    -52.0,  0.0,    0.0},
          { 2, 0, 2,-4, 1,    101.0,   0.0,    0.0,    -54.0,  0.0,    0.0},
          {-1, 1, 0, 2, 1,   -113.0,   0.0,    0.0,     59.0,  0.0,    0.0},
          { 0, 0, 2,-1, 1,   -106.0,   0.0,    0.0,     61.0,  0.0,    0.0},

       /* 191-200 */
          { 0,-2, 2, 2, 2,   -129.0,   0.0,    1.0,     55.0,  0.0,    0.0},
          { 2, 0, 0, 2, 1,   -114.0,   0.0,    0.0,     57.0,  0.0,    0.0},
          { 4, 0, 2,-2, 2,    113.0,   0.0,   -1.0,    -49.0,  0.0,    0.0},
          { 2, 0, 0,-2, 2,   -102.0,   0.0,    0.0,     44.0,  0.0,    0.0},
          { 0, 2, 0, 0, 1,    -94.0,   0.0,    0.0,     51.0,  0.0,    0.0},
          { 1, 0, 0,-4, 1,   -100.0,   0.0,   -1.0,     56.0,  0.0,    0.0},
          { 0, 2, 2,-2, 1,     87.0,   0.0,    0.0,    -47.0,  0.0,    0.0},
          {-3, 0, 0, 4, 0,    161.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          {-1, 1, 2, 0, 1,     96.0,   0.0,    0.0,    -50.0,  0.0,    0.0},
          {-1,-1, 0, 4, 0,    151.0,   0.0,   -1.0,     -5.0,  0.0,    0.0},

       /* 201-210 */
          {-1,-2, 2, 2, 2,   -104.0,   0.0,    0.0,     44.0,  0.0,    0.0},
          {-2,-1, 2, 4, 2,   -110.0,   0.0,    0.0,     48.0,  0.0,    0.0},
          { 1,-1, 2, 2, 1,   -100.0,   0.0,    1.0,     50.0,  0.0,    0.0},
          {-2, 1, 0, 2, 0,     92.0,   0.0,   -5.0,     12.0,  0.0,   -2.0},
          {-2, 1, 2, 0, 1,     82.0,   0.0,    0.0,    -45.0,  0.0,    0.0},
          { 2, 1, 0,-2, 1,     82.0,   0.0,    0.0,    -45.0,  0.0,    0.0},
          {-3, 0, 2, 0, 1,    -78.0,   0.0,    0.0,     41.0,  0.0,    0.0},
          {-2, 0, 2,-2, 1,    -77.0,   0.0,    0.0,     43.0,  0.0,    0.0},
          {-1, 1, 0, 2, 2,      2.0,   0.0,    0.0,     54.0,  0.0,    0.0},
          { 0,-1, 2,-1, 2,     94.0,   0.0,    0.0,    -40.0,  0.0,    0.0},

       /* 211-220 */
          {-1, 0, 4,-2, 2,    -93.0,   0.0,    0.0,     40.0,  0.0,    0.0},
          { 0,-2, 2, 0, 2,    -83.0,   0.0,   10.0,     40.0,  0.0,   -2.0},
          {-1, 0, 2, 1, 2,     83.0,   0.0,    0.0,    -36.0,  0.0,    0.0},
          { 2, 0, 0, 0, 2,    -91.0,   0.0,    0.0,     39.0,  0.0,    0.0},
          { 0, 0, 2, 0, 3,    128.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          {-2, 0, 4, 0, 2,    -79.0,   0.0,    0.0,     34.0,  0.0,    0.0},
          {-1, 0,-2, 0, 1,    -83.0,   0.0,    0.0,     47.0,  0.0,    0.0},
          {-1, 1, 2, 2, 1,     84.0,   0.0,    0.0,    -44.0,  0.0,    0.0},
          { 3, 0, 0, 0, 1,     83.0,   0.0,    0.0,    -43.0,  0.0,    0.0},
          {-1, 0, 2, 3, 2,     91.0,   0.0,    0.0,    -39.0,  0.0,    0.0},

       /* 221-230 */
          { 2,-1, 2, 0, 1,    -77.0,   0.0,    0.0,     39.0,  0.0,    0.0},
          { 0, 1, 2, 2, 1,     84.0,   0.0,    0.0,    -43.0,  0.0,    0.0},
          { 0,-1, 2, 4, 2,    -92.0,   0.0,    1.0,     39.0,  0.0,    0.0},
          { 2,-1, 2, 2, 2,    -92.0,   0.0,    1.0,     39.0,  0.0,    0.0},
          { 0, 2,-2, 2, 0,    -94.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1,-1, 2,-1, 1,     68.0,   0.0,    0.0,    -36.0,  0.0,    0.0},
          { 0,-2, 0, 0, 1,    -61.0,   0.0,    0.0,     32.0,  0.0,    0.0},
          { 1, 0, 2,-4, 2,     71.0,   0.0,    0.0,    -31.0,  0.0,    0.0},
          { 1,-1, 0,-2, 1,     62.0,   0.0,    0.0,    -34.0,  0.0,    0.0},
          {-1,-1, 2, 0, 1,    -63.0,   0.0,    0.0,     33.0,  0.0,    0.0},

       /* 231-240 */
          { 1,-1, 2,-2, 2,    -73.0,   0.0,    0.0,     32.0,  0.0,    0.0},
          {-2,-1, 0, 4, 0,    115.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-1, 0, 0, 3, 0,   -103.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-2,-1, 2, 2, 2,     63.0,   0.0,    0.0,    -28.0,  0.0,    0.0},
          { 0, 2, 2, 0, 2,     74.0,   0.0,    0.0,    -32.0,  0.0,    0.0},
          { 1, 1, 0, 2, 0,   -103.0,   0.0,   -3.0,      3.0,  0.0,   -1.0},
          { 2, 0, 2,-1, 2,    -69.0,   0.0,    0.0,     30.0,  0.0,    0.0},
          { 1, 0, 2, 1, 1,     57.0,   0.0,    0.0,    -29.0,  0.0,    0.0},
          { 4, 0, 0, 0, 0,     94.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          { 2, 1, 2, 0, 1,     64.0,   0.0,    0.0,    -33.0,  0.0,    0.0},

       /* 241-250 */
          { 3,-1, 2, 0, 2,    -63.0,   0.0,    0.0,     26.0,  0.0,    0.0},
          {-2, 2, 0, 2, 1,    -38.0,   0.0,    0.0,     20.0,  0.0,    0.0},
          { 1, 0, 2,-3, 1,    -43.0,   0.0,    0.0,     24.0,  0.0,    0.0},
          { 1, 1, 2,-4, 1,    -45.0,   0.0,    0.0,     23.0,  0.0,    0.0},
          {-1,-1, 2,-2, 1,     47.0,   0.0,    0.0,    -24.0,  0.0,    0.0},
          { 0,-1, 0,-1, 1,    -48.0,   0.0,    0.0,     25.0,  0.0,    0.0},
          { 0,-1, 0,-2, 1,     45.0,   0.0,    0.0,    -26.0,  0.0,    0.0},
          {-2, 0, 0, 0, 2,     56.0,   0.0,    0.0,    -25.0,  0.0,    0.0},
          {-2, 0,-2, 2, 0,     88.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-1, 0,-2, 4, 0,    -75.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 251-260 */
          { 1,-2, 0, 0, 0,     85.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 1, 0, 1, 1,     49.0,   0.0,    0.0,    -26.0,  0.0,    0.0},
          {-1, 2, 0, 2, 0,    -74.0,   0.0,   -3.0,     -1.0,  0.0,   -1.0},
          { 1,-1, 2,-2, 1,    -39.0,   0.0,    0.0,     21.0,  0.0,    0.0},
          { 1, 2, 2,-2, 2,     45.0,   0.0,    0.0,    -20.0,  0.0,    0.0},
          { 2,-1, 2,-2, 2,     51.0,   0.0,    0.0,    -22.0,  0.0,    0.0},
          { 1, 0, 2,-1, 1,    -40.0,   0.0,    0.0,     21.0,  0.0,    0.0},
          { 2, 1, 2,-2, 1,     41.0,   0.0,    0.0,    -21.0,  0.0,    0.0},
          {-2, 0, 0,-2, 1,    -42.0,   0.0,    0.0,     24.0,  0.0,    0.0},
          { 1,-2, 2, 0, 2,    -51.0,   0.0,    0.0,     22.0,  0.0,    0.0},

       /* 261-270 */
          { 0, 1, 2, 1, 1,    -42.0,   0.0,    0.0,     22.0,  0.0,    0.0},
          { 1, 0, 4,-2, 1,     39.0,   0.0,    0.0,    -21.0,  0.0,    0.0},
          {-2, 0, 4, 2, 2,     46.0,   0.0,    0.0,    -18.0,  0.0,    0.0},
          { 1, 1, 2, 1, 2,    -53.0,   0.0,    0.0,     22.0,  0.0,    0.0},
          { 1, 0, 0, 4, 0,     82.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          { 1, 0, 2, 2, 0,     81.0,   0.0,   -1.0,     -4.0,  0.0,    0.0},
          { 2, 0, 2, 1, 2,     47.0,   0.0,    0.0,    -19.0,  0.0,    0.0},
          { 3, 1, 2, 0, 2,     53.0,   0.0,    0.0,    -23.0,  0.0,    0.0},
          { 4, 0, 2, 0, 1,    -45.0,   0.0,    0.0,     22.0,  0.0,    0.0},
          {-2,-1, 2, 0, 0,    -44.0,   0.0,    0.0,     -2.0,  0.0,    0.0},

       /* 271-280 */
          { 0, 1,-2, 2, 1,    -33.0,   0.0,    0.0,     16.0,  0.0,    0.0},
          { 1, 0,-2, 1, 0,    -61.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          { 0,-1,-2, 2, 1,     28.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
          { 2,-1, 0,-2, 1,    -38.0,   0.0,    0.0,     19.0,  0.0,    0.0},
          {-1, 0, 2,-1, 2,    -33.0,   0.0,    0.0,     21.0,  0.0,    0.0},
          { 1, 0, 2,-3, 2,    -60.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 1, 2,-2, 3,     48.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
          { 0, 0, 2,-3, 1,     27.0,   0.0,    0.0,    -14.0,  0.0,    0.0},
          {-1, 0,-2, 2, 1,     38.0,   0.0,    0.0,    -20.0,  0.0,    0.0},
          { 0, 0, 2,-4, 2,     31.0,   0.0,    0.0,    -13.0,  0.0,    0.0},

       /* 281-290 */
          {-2, 1, 0, 0, 1,    -29.0,   0.0,    0.0,     15.0,  0.0,    0.0},
          {-1, 0, 0,-1, 1,     28.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
          { 2, 0, 2,-4, 2,    -32.0,   0.0,    0.0,     15.0,  0.0,    0.0},
          { 0, 0, 4,-4, 4,     45.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
          { 0, 0, 4,-4, 2,    -44.0,   0.0,    0.0,     19.0,  0.0,    0.0},
          {-1,-2, 0, 2, 1,     28.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
          {-2, 0, 0, 3, 0,    -51.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 0,-2, 2, 1,    -36.0,   0.0,    0.0,     20.0,  0.0,    0.0},
          {-3, 0, 2, 2, 2,     44.0,   0.0,    0.0,    -19.0,  0.0,    0.0},
          {-3, 0, 2, 2, 1,     26.0,   0.0,    0.0,    -14.0,  0.0,    0.0},

       /* 291-300 */
          {-2, 0, 2, 2, 0,    -60.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 2,-1, 0, 0, 1,     35.0,   0.0,    0.0,    -18.0,  0.0,    0.0},
          {-2, 1, 2, 2, 2,    -27.0,   0.0,    0.0,     11.0,  0.0,    0.0},
          { 1, 1, 0, 1, 0,     47.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 0, 1, 4,-2, 2,     36.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
          {-1, 1, 0,-2, 1,    -36.0,   0.0,    0.0,     20.0,  0.0,    0.0},
          { 0, 0, 0,-4, 1,    -35.0,   0.0,    0.0,     19.0,  0.0,    0.0},
          { 1,-1, 0, 2, 1,    -37.0,   0.0,    0.0,     19.0,  0.0,    0.0},
          { 1, 1, 0, 2, 1,     32.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
          {-1, 2, 2, 2, 2,     35.0,   0.0,    0.0,    -14.0,  0.0,    0.0},

       /* 301-310 */
          { 3, 1, 2,-2, 2,     32.0,   0.0,    0.0,    -13.0,  0.0,    0.0},
          { 0,-1, 0, 4, 0,     65.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 2,-1, 0, 2, 0,     47.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 0, 0, 4, 0, 1,     32.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
          { 2, 0, 4,-2, 2,     37.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
          {-1,-1, 2, 4, 1,    -30.0,   0.0,    0.0,     15.0,  0.0,    0.0},
          { 1, 0, 0, 4, 1,    -32.0,   0.0,    0.0,     16.0,  0.0,    0.0},
          { 1,-2, 2, 2, 2,    -31.0,   0.0,    0.0,     13.0,  0.0,    0.0},
          { 0, 0, 2, 3, 2,     37.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
          {-1, 1, 2, 4, 2,     31.0,   0.0,    0.0,    -13.0,  0.0,    0.0},

       /* 311-320 */
          { 3, 0, 0, 2, 0,     49.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-1, 0, 4, 2, 2,     32.0,   0.0,    0.0,    -13.0,  0.0,    0.0},
          { 1, 1, 2, 2, 1,     23.0,   0.0,    0.0,    -12.0,  0.0,    0.0},
          {-2, 0, 2, 6, 2,    -43.0,   0.0,    0.0,     18.0,  0.0,    0.0},
          { 2, 1, 2, 2, 2,     26.0,   0.0,    0.0,    -11.0,  0.0,    0.0},
          {-1, 0, 2, 6, 2,    -32.0,   0.0,    0.0,     14.0,  0.0,    0.0},
          { 1, 0, 2, 4, 1,    -29.0,   0.0,    0.0,     14.0,  0.0,    0.0},
          { 2, 0, 2, 4, 2,    -27.0,   0.0,    0.0,     12.0,  0.0,    0.0},
          { 1, 1,-2, 1, 0,     30.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-3, 1, 2, 1, 2,    -11.0,   0.0,    0.0,      5.0,  0.0,    0.0},

       /* 321-330 */
          { 2, 0,-2, 0, 2,    -21.0,   0.0,    0.0,     10.0,  0.0,    0.0},
          {-1, 0, 0, 1, 2,    -34.0,   0.0,    0.0,     15.0,  0.0,    0.0},
          {-4, 0, 2, 2, 1,    -10.0,   0.0,    0.0,      6.0,  0.0,    0.0},
          {-1,-1, 0, 1, 0,    -36.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 0,-2, 2, 2,     -9.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          { 1, 0, 0,-1, 2,    -12.0,   0.0,    0.0,      5.0,  0.0,    0.0},
          { 0,-1, 2,-2, 3,    -21.0,   0.0,    0.0,      5.0,  0.0,    0.0},
          {-2, 1, 2, 0, 0,    -29.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 0, 0, 2,-2, 4,    -15.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          {-2,-2, 0, 2, 0,    -20.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 331-340 */
          {-2, 0,-2, 4, 0,     28.0,   0.0,    0.0,      0.0,  0.0,   -2.0},
          { 0,-2,-2, 2, 0,     17.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 2, 0,-2, 1,    -22.0,   0.0,    0.0,     12.0,  0.0,    0.0},
          { 3, 0, 0,-4, 1,    -14.0,   0.0,    0.0,      7.0,  0.0,    0.0},
          {-1, 1, 2,-2, 2,     24.0,   0.0,    0.0,    -11.0,  0.0,    0.0},
          { 1,-1, 2,-4, 1,     11.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
          { 1, 1, 0,-2, 2,     14.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
          {-3, 0, 2, 0, 0,     24.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-3, 0, 2, 0, 2,     18.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
          {-2, 0, 0, 1, 0,    -38.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 341-350 */
          { 0, 0,-2, 1, 0,    -31.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-3, 0, 0, 2, 1,    -16.0,   0.0,    0.0,      8.0,  0.0,    0.0},
          {-1,-1,-2, 2, 0,     29.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 1, 2,-4, 1,    -18.0,   0.0,    0.0,     10.0,  0.0,    0.0},
          { 2, 1, 0,-4, 1,    -10.0,   0.0,    0.0,      5.0,  0.0,    0.0},
          { 0, 2, 0,-2, 1,    -17.0,   0.0,    0.0,     10.0,  0.0,    0.0},
          { 1, 0, 0,-3, 1,      9.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          {-2, 0, 2,-2, 2,     16.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
          {-2,-1, 0, 0, 1,     22.0,   0.0,    0.0,    -12.0,  0.0,    0.0},
          {-4, 0, 0, 2, 0,     20.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 351-360 */
          { 1, 1, 0,-4, 1,    -13.0,   0.0,    0.0,      6.0,  0.0,    0.0},
          {-1, 0, 2,-4, 1,    -17.0,   0.0,    0.0,      9.0,  0.0,    0.0},
          { 0, 0, 4,-4, 1,    -14.0,   0.0,    0.0,      8.0,  0.0,    0.0},
          { 0, 3, 2,-2, 2,      0.0,   0.0,    0.0,     -7.0,  0.0,    0.0},
          {-3,-1, 0, 4, 0,     14.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-3, 0, 0, 4, 1,     19.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
          { 1,-1,-2, 2, 0,    -34.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1,-1, 0, 2, 2,    -20.0,   0.0,    0.0,      8.0,  0.0,    0.0},
          { 1,-2, 0, 0, 1,      9.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
          { 1,-1, 0, 0, 2,    -18.0,   0.0,    0.0,      7.0,  0.0,    0.0},

       /* 361-370 */
          { 0, 0, 0, 1, 2,     13.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
          {-1,-1, 2, 0, 0,     17.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1,-2, 2,-2, 2,    -12.0,   0.0,    0.0,      5.0,  0.0,    0.0},
          { 0,-1, 2,-1, 1,     15.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
          {-1, 0, 2, 0, 3,    -11.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          { 1, 1, 0, 0, 2,     13.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
          {-1, 1, 2, 0, 0,    -18.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 2, 0, 0, 0,    -35.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1, 2, 2, 0, 2,      9.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          {-1, 0, 4,-2, 1,    -19.0,   0.0,    0.0,     10.0,  0.0,    0.0},

       /* 371-380 */
          { 3, 0, 2,-4, 2,    -26.0,   0.0,    0.0,     11.0,  0.0,    0.0},
          { 1, 2, 2,-2, 1,      8.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          { 1, 0, 4,-4, 2,    -10.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          {-2,-1, 0, 4, 1,     10.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
          { 0,-1, 0, 2, 2,    -21.0,   0.0,    0.0,      9.0,  0.0,    0.0},
          {-2, 1, 0, 4, 0,    -15.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-2,-1, 2, 2, 1,      9.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
          { 2, 0,-2, 2, 0,    -29.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 0, 0, 1, 1,    -19.0,   0.0,    0.0,     10.0,  0.0,    0.0},
          { 0, 1, 0, 2, 2,     12.0,   0.0,    0.0,     -5.0,  0.0,    0.0},

       /* 381-390 */
          { 1,-1, 2,-1, 2,     22.0,   0.0,    0.0,     -9.0,  0.0,    0.0},
          {-2, 0, 4, 0, 1,    -10.0,   0.0,    0.0,      5.0,  0.0,    0.0},
          { 2, 1, 0, 0, 1,    -20.0,   0.0,    0.0,     11.0,  0.0,    0.0},
          { 0, 1, 2, 0, 0,    -20.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0,-1, 4,-2, 2,    -17.0,   0.0,    0.0,      7.0,  0.0,    0.0},
          { 0, 0, 4,-2, 4,     15.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 0, 2, 2, 0, 1,      8.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          {-3, 0, 0, 6, 0,     14.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1,-1, 0, 4, 1,    -12.0,   0.0,    0.0,      6.0,  0.0,    0.0},
          { 1,-2, 0, 2, 0,     25.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 391-400 */
          {-1, 0, 0, 4, 2,    -13.0,   0.0,    0.0,      6.0,  0.0,    0.0},
          {-1,-2, 2, 2, 1,    -14.0,   0.0,    0.0,      8.0,  0.0,    0.0},
          {-1, 0, 0,-2, 2,     13.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
          { 1, 0,-2,-2, 1,    -17.0,   0.0,    0.0,      9.0,  0.0,    0.0},
          { 0, 0,-2,-2, 1,    -12.0,   0.0,    0.0,      6.0,  0.0,    0.0},
          {-2, 0,-2, 0, 1,    -10.0,   0.0,    0.0,      5.0,  0.0,    0.0},
          { 0, 0, 0, 3, 1,     10.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
          { 0, 0, 0, 3, 0,    -15.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1, 1, 0, 4, 0,    -22.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1,-1, 2, 2, 0,     28.0,   0.0,    0.0,     -1.0,  0.0,    0.0},

       /* 401-410 */
          {-2, 0, 2, 3, 2,     15.0,   0.0,    0.0,     -7.0,  0.0,    0.0},
          { 1, 0, 0, 2, 2,     23.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
          { 0,-1, 2, 1, 2,     12.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
          { 3,-1, 0, 0, 0,     29.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 2, 0, 0, 1, 0,    -25.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          { 1,-1, 2, 0, 0,     22.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 0, 2, 1, 0,    -18.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 0, 2, 0, 3,     15.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          { 3, 1, 0, 0, 0,    -23.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 3,-1, 2,-2, 2,     12.0,   0.0,    0.0,     -5.0,  0.0,    0.0},

       /* 411-420 */
          { 2, 0, 2,-1, 1,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          { 1, 1, 2, 0, 0,    -19.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 0, 4,-1, 2,    -10.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          { 1, 2, 2, 0, 2,     21.0,   0.0,    0.0,     -9.0,  0.0,    0.0},
          {-2, 0, 0, 6, 0,     23.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 0,-1, 0, 4, 1,    -16.0,   0.0,    0.0,      8.0,  0.0,    0.0},
          {-2,-1, 2, 4, 1,    -19.0,   0.0,    0.0,      9.0,  0.0,    0.0},
          { 0,-2, 2, 2, 1,    -22.0,   0.0,    0.0,     10.0,  0.0,    0.0},
          { 0,-1, 2, 2, 0,     27.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          {-1, 0, 2, 3, 1,     16.0,   0.0,    0.0,     -8.0,  0.0,    0.0},

       /* 421-430 */
          {-2, 1, 2, 4, 2,     19.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
          { 2, 0, 0, 2, 2,      9.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          { 2,-2, 2, 0, 2,     -9.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          {-1, 1, 2, 3, 2,     -9.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          { 3, 0, 2,-1, 2,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          { 4, 0, 2,-2, 1,     18.0,   0.0,    0.0,     -9.0,  0.0,    0.0},
          {-1, 0, 0, 6, 0,     16.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          {-1,-2, 2, 4, 2,    -10.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          {-3, 0, 2, 6, 2,    -23.0,   0.0,    0.0,      9.0,  0.0,    0.0},
          {-1, 0, 2, 4, 0,     16.0,   0.0,    0.0,     -1.0,  0.0,    0.0},

       /* 431-440 */
          { 3, 0, 0, 2, 1,    -12.0,   0.0,    0.0,      6.0,  0.0,    0.0},
          { 3,-1, 2, 0, 1,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          { 3, 0, 2, 0, 0,     30.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 1, 0, 4, 0, 2,     24.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
          { 5, 0, 2,-2, 2,     10.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          { 0,-1, 2, 4, 1,    -16.0,   0.0,    0.0,      7.0,  0.0,    0.0},
          { 2,-1, 2, 2, 1,    -16.0,   0.0,    0.0,      7.0,  0.0,    0.0},
          { 0, 1, 2, 4, 2,     17.0,   0.0,    0.0,     -7.0,  0.0,    0.0},
          { 1,-1, 2, 4, 2,    -24.0,   0.0,    0.0,     10.0,  0.0,    0.0},
          { 3,-1, 2, 2, 2,    -12.0,   0.0,    0.0,      5.0,  0.0,    0.0},

       /* 441-450 */
          { 3, 0, 2, 2, 1,    -24.0,   0.0,    0.0,     11.0,  0.0,    0.0},
          { 5, 0, 2, 0, 2,    -23.0,   0.0,    0.0,      9.0,  0.0,    0.0},
          { 0, 0, 2, 6, 2,    -13.0,   0.0,    0.0,      5.0,  0.0,    0.0},
          { 4, 0, 2, 2, 2,    -15.0,   0.0,    0.0,      7.0,  0.0,    0.0},
          { 0,-1, 1,-1, 1,      0.0,   0.0,-1988.0,      0.0,  0.0,-1679.0},
          {-1, 0, 1, 0, 3,      0.0,   0.0,  -63.0,      0.0,  0.0,  -27.0},
          { 0,-2, 2,-2, 3,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 0,-1, 0, 1,      0.0,   0.0,    5.0,      0.0,  0.0,    4.0},
          { 2,-2, 0,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          {-1, 0, 1, 0, 2,      0.0,   0.0,  364.0,      0.0,  0.0,  176.0},

       /* 451-460 */
          {-1, 0, 1, 0, 1,      0.0,   0.0,-1044.0,      0.0,  0.0, -891.0},
          {-1,-1, 2,-1, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          {-2, 2, 0, 2, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-1, 0, 1, 0, 0,      0.0,   0.0,  330.0,      0.0,  0.0,    0.0},
          {-4, 1, 2, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-3, 0, 2, 1, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-2,-1, 2, 0, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          { 1, 0,-2, 1, 1,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 2,-1,-2, 0, 1,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          {-4, 0, 2, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 461-470 */
          {-3, 1, 0, 3, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1, 0,-1, 2, 0,      0.0,   0.0,    5.0,      0.0,  0.0,    0.0},
          { 0,-2, 0, 0, 2,      0.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          { 0,-2, 0, 0, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-3, 0, 0, 3, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-2,-1, 0, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-1, 0,-2, 3, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-4, 0, 0, 4, 0,    -12.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 2, 1,-2, 0, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 2,-1, 0,-2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},

       /* 471-480 */
          { 0, 0, 1,-1, 0,     -5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1, 2, 0, 1, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-2, 1, 2, 0, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          { 1, 1, 0,-1, 1,      7.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          { 1, 0, 1,-2, 1,      0.0,   0.0,  -12.0,      0.0,  0.0,  -10.0},
          { 0, 2, 0, 0, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 1,-1, 2,-3, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-1, 1, 2,-1, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-2, 0, 4,-2, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          {-2, 0, 4,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},

       /* 481-490 */
          {-2,-2, 0, 2, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          {-2, 0,-2, 4, 0,      0.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 2, 2,-4, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          { 1, 1, 2,-4, 2,      7.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          {-1, 2, 2,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 2, 0, 0,-3, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-1, 2, 0, 0, 1,     -5.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          { 0, 0, 0,-2, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1,-1, 2,-2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-1, 1, 0, 0, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},

       /* 491-500 */
          { 0, 0, 0,-1, 2,     -8.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          {-2, 1, 0, 1, 0,      9.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1,-2, 0,-2, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 1, 0,-2, 0, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-3, 1, 0, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1, 1,-2, 2, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1,-1, 0, 0, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          {-3, 0, 0, 2, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-3,-1, 0, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 2, 0, 2,-6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},

       /* 501-510 */
          { 0, 1, 2,-4, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 2, 0, 0,-4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          {-2, 1, 2,-2, 1,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 0,-1, 2,-4, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 0, 1, 0,-2, 2,      9.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          {-1, 0, 0,-2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 2, 0,-2,-2, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-4, 0, 2, 0, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-1,-1, 0,-1, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 0, 0,-2, 0, 2,      9.0,   0.0,    0.0,     -3.0,  0.0,    0.0},

       /* 511-520 */
          {-3, 0, 0, 1, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1, 0,-2, 1, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-2, 0,-2, 2, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 0, 0,-4, 2, 0,      8.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-2,-1,-2, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 0, 2,-6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-1, 0, 2,-4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 1, 0, 0,-4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 2, 1, 2,-4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          { 2, 1, 2,-4, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},

       /* 521-530 */
          { 0, 1, 4,-4, 4,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 1, 4,-4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          {-1,-1,-2, 4, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1,-3, 0, 2, 0,      9.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1, 0,-2, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-2,-1, 0, 3, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 0,-2, 3, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-2, 0, 0, 3, 1,     -5.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          { 0,-1, 0, 1, 0,    -13.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-3, 0, 2, 2, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 531-540 */
          { 1, 1,-2, 2, 0,     10.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1, 1, 0, 2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 1,-2, 2,-2, 1,     10.0,   0.0,   13.0,      6.0,  0.0,   -5.0},
          { 0, 0, 1, 0, 2,      0.0,   0.0,   30.0,      0.0,  0.0,   14.0},
          { 0, 0, 1, 0, 1,      0.0,   0.0, -162.0,      0.0,  0.0, -138.0},
          { 0, 0, 1, 0, 0,      0.0,   0.0,   75.0,      0.0,  0.0,    0.0},
          {-1, 2, 0, 2, 1,     -7.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          { 0, 0, 2, 0, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-2, 0, 2, 0, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 2, 0, 0,-1, 1,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},

       /* 541-550 */
          { 3, 0, 0,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 1, 0, 2,-2, 3,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 2, 0, 0, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 2, 0, 2,-3, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-1, 1, 4,-2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-2,-2, 0, 4, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0,-3, 0, 2, 0,      9.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 0,-2, 4, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1,-1, 0, 3, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-2, 0, 0, 4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},

       /* 551-560 */
          {-1, 0, 0, 3, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 2,-2, 0, 0, 0,      7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1,-1, 0, 1, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1, 0, 0, 2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0,-2, 2, 0, 1,     -6.0,   0.0,   -3.0,      3.0,  0.0,    1.0},
          {-1, 0, 1, 2, 1,      0.0,   0.0,   -3.0,      0.0,  0.0,   -2.0},
          {-1, 1, 0, 3, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1,-1, 2, 1, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 0,-1, 2, 0, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-2, 1, 2, 2, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},

       /* 561-570 */
          { 2,-2, 2,-2, 2,     -1.0,   0.0,    3.0,      3.0,  0.0,   -1.0},
          { 1, 1, 0, 1, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 1, 0, 1, 0, 1,      0.0,   0.0,  -13.0,      0.0,  0.0,  -11.0},
          { 1, 0, 1, 0, 0,      3.0,   0.0,    6.0,      0.0,  0.0,    0.0},
          { 0, 2, 0, 2, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 2,-1, 2,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 0,-1, 4,-2, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          { 0, 0, 4,-2, 3,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 1, 4,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 4, 0, 2,-4, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},

       /* 571-580 */
          { 2, 2, 2,-2, 2,      8.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 2, 0, 4,-4, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-1,-2, 0, 4, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1,-3, 2, 2, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          {-3, 0, 2, 4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          {-3, 0, 2,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-1,-1, 0,-2, 1,      8.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          {-3, 0, 0, 0, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          {-3, 0,-2, 2, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 1, 0,-4, 1,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},

       /* 581-590 */
          {-2, 1, 0,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-4, 0, 0, 0, 1,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
          {-1, 0, 0,-4, 1,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          {-3, 0, 0,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 0, 0, 0, 3, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          {-1, 1, 0, 4, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 1,-2, 2, 0, 1,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          { 0, 1, 0, 3, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-1, 0, 2, 2, 3,      6.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 0, 0, 2, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},

       /* 591-600 */
          {-2, 0, 2, 2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-1, 1, 2, 2, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 3, 0, 0, 0, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 2, 1, 0, 1, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 2,-1, 2,-1, 2,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 0, 0, 2, 0, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 0, 0, 3, 0, 3,      0.0,   0.0,  -26.0,      0.0,  0.0,  -11.0},
          { 0, 0, 3, 0, 2,      0.0,   0.0,  -10.0,      0.0,  0.0,   -5.0},
          {-1, 2, 2, 2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          {-1, 0, 4, 0, 0,    -13.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 601-610 */
          { 1, 2, 2, 0, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 3, 1, 2,-2, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 1, 1, 4,-2, 2,      7.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          {-2,-1, 0, 6, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0,-2, 0, 4, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-2, 0, 0, 6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-2,-2, 2, 4, 2,     -6.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 0,-3, 2, 2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 0, 0, 0, 4, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          {-1,-1, 2, 3, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},

       /* 611-620 */
          {-2, 0, 2, 4, 0,     13.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 2,-1, 0, 2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 1, 0, 0, 3, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 1, 0, 4, 1,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 0, 1, 0, 4, 0,    -11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1,-1, 2, 1, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 0, 0, 2, 2, 3,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 0, 2, 2, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-1, 0, 2, 2, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-2, 0, 4, 2, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},

       /* 621-630 */
          { 2, 1, 0, 2, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 2, 1, 0, 2, 0,    -12.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 2,-1, 2, 0, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 0, 2, 1, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 1, 2, 2, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 2, 0, 2, 0, 3,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 3, 0, 2, 0, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 1, 0, 2, 0, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          { 1, 0, 3, 0, 3,      0.0,   0.0,   -5.0,      0.0,  0.0,   -2.0},
          { 1, 1, 2, 1, 1,     -7.0,   0.0,    0.0,      4.0,  0.0,    0.0},

       /* 631-640 */
          { 0, 2, 2, 2, 2,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 2, 1, 2, 0, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 2, 0, 4,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 4, 1, 2,-2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          {-1,-1, 0, 6, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          {-3,-1, 2, 6, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          {-1, 0, 0, 6, 1,     -5.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          {-3, 0, 2, 6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 1,-1, 0, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 1,-1, 0, 4, 0,     12.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 641-650 */
          {-2, 0, 2, 5, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 1,-2, 2, 2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 3,-1, 0, 2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1,-1, 2, 2, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 0, 2, 3, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          {-1, 1, 2, 4, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 0, 1, 2, 3, 2,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          {-1, 0, 4, 2, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 2, 0, 2, 1, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 5, 0, 0, 0, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 651-660 */
          { 2, 1, 2, 1, 2,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          { 1, 0, 4, 0, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 3, 1, 2, 0, 1,      7.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
          { 3, 0, 4,-2, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          {-2,-1, 2, 6, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 0, 0, 0, 6, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0,-2, 2, 4, 2,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          {-2, 0, 2, 6, 1,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
          { 2, 0, 0, 4, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 2, 0, 0, 4, 0,     10.0,   0.0,    0.0,      0.0,  0.0,    0.0},

       /* 661-670 */
          { 2,-2, 2, 2, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 0, 0, 2, 4, 0,      7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 1, 0, 2, 3, 2,      7.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
          { 4, 0, 0, 2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 2, 0, 2, 2, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
          { 0, 0, 4, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 4,-1, 2, 0, 2,     -6.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 3, 0, 2, 1, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 2, 1, 2, 2, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 4, 1, 2, 0, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},

       /* 671-678 */
          {-1,-1, 2, 6, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          {-1, 0, 2, 6, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 1,-1, 2, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
          { 1, 1, 2, 4, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
          { 3, 1, 2, 2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
          { 5, 0, 2, 0, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          { 2,-1, 2, 4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
          { 2, 0, 2, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0}
       };

    /* Number of terms in the luni-solar nutation model */
       const int NLS = (int) (sizeof xls / sizeof xls[0]);

    /* ------------------------ */
    /* Planetary nutation model */
    /* ------------------------ */

    /* The units for the sine and cosine coefficients are */
    /* 0.1 microarcsecond                                 */

       static const struct {
          int nl,               /* coefficients of l, F, D and Omega */
              nf,
              nd,
              nom,
              nme,              /* coefficients of planetary longitudes */
              nve,
              nea,
              nma,
              nju,
              nsa,
              nur,
              nne,
              npa;              /* coefficient of general precession */
          int sp,cp;            /* longitude sin, cos coefficients */
          int se,ce;            /* obliquity sin, cos coefficients */
       } xpl[] = {

       /* 1-10 */
          { 0, 0, 0, 0, 0,  0,  8,-16, 4, 5, 0, 0, 0, 1440,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0, -8, 16,-4,-5, 0, 0, 2,   56,-117,  -42, -40},
          { 0, 0, 0, 0, 0,  0,  8,-16, 4, 5, 0, 0, 2,  125, -43,    0, -54},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0,-1, 2, 2,    0,   5,    0,   0},
          { 0, 0, 0, 0, 0,  0, -4,  8,-1,-5, 0, 0, 2,    3,  -7,   -3,   0},
          { 0, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 1,    3,   0,    0,  -2},
          { 0, 1,-1, 1, 0,  0,  3, -8, 3, 0, 0, 0, 0, -114,   0,    0,  61},
          {-1, 0, 0, 0, 0, 10, -3,  0, 0, 0, 0, 0, 0, -219,  89,    0,   0},
          { 0, 0, 0, 0, 0,  0,  0,  0,-2, 6,-3, 0, 2,   -3,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0, -462,1604,    0,   0},

       /* 11-20 */
          { 0, 1,-1, 1, 0,  0, -5,  8,-3, 0, 0, 0, 0,   99,   0,    0, -53},
          { 0, 0, 0, 0, 0,  0, -4,  8,-3, 0, 0, 0, 1,   -3,   0,    0,   2},
          { 0, 0, 0, 0, 0,  0,  4, -8, 1, 5, 0, 0, 2,    0,   6,    2,   0},
          { 0, 0, 0, 0, 0, -5,  6,  4, 0, 0, 0, 0, 2,    3,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  0,  0, 2,-5, 0, 0, 2,  -12,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  0,  0, 2,-5, 0, 0, 1,   14,-218,  117,   8},
          { 0, 1,-1, 1, 0,  0, -1,  0, 2,-5, 0, 0, 0,   31,-481, -257, -17},
          { 0, 0, 0, 0, 0,  0,  0,  0, 2,-5, 0, 0, 0, -491, 128,    0,   0},
          { 0, 1,-1, 1, 0,  0, -1,  0,-2, 5, 0, 0, 0,-3084,5123, 2735,1647},
          { 0, 0, 0, 0, 0,  0,  0,  0,-2, 5, 0, 0, 1,-1444,2409,-1286,-771},

       /* 21-30 */
          { 0, 0, 0, 0, 0,  0,  0,  0,-2, 5, 0, 0, 2,   11, -24,  -11,  -9},
          { 2,-1,-1, 0, 0,  0,  3, -7, 0, 0, 0, 0, 0,   26,  -9,    0,   0},
          { 1, 0,-2, 0, 0, 19,-21,  3, 0, 0, 0, 0, 0,  103, -60,    0,   0},
          { 0, 1,-1, 1, 0,  2, -4,  0,-3, 0, 0, 0, 0,    0, -13,   -7,   0},
          { 1, 0,-1, 1, 0,  0, -1,  0, 2, 0, 0, 0, 0,  -26, -29,  -16,  14},
          { 0, 1,-1, 1, 0,  0, -1,  0,-4,10, 0, 0, 0,    9, -27,  -14,  -5},
          {-2, 0, 2, 1, 0,  0,  2,  0, 0,-5, 0, 0, 0,   12,   0,    0,  -6},
          { 0, 0, 0, 0, 0,  3, -7,  4, 0, 0, 0, 0, 0,   -7,   0,    0,   0},
          { 0,-1, 1, 0, 0,  0,  1,  0, 1,-1, 0, 0, 0,    0,  24,    0,   0},
          {-2, 0, 2, 1, 0,  0,  2,  0,-2, 0, 0, 0, 0,  284,   0,    0,-151},

       /* 31-40 */
          {-1, 0, 0, 0, 0, 18,-16,  0, 0, 0, 0, 0, 0,  226, 101,    0,   0},
          {-2, 1, 1, 2, 0,  0,  1,  0,-2, 0, 0, 0, 0,    0,  -8,   -2,   0},
          {-1, 1,-1, 1, 0, 18,-17,  0, 0, 0, 0, 0, 0,    0,  -6,   -3,   0},
          {-1, 0, 1, 1, 0,  0,  2, -2, 0, 0, 0, 0, 0,    5,   0,    0,  -3},
          { 0, 0, 0, 0, 0, -8, 13,  0, 0, 0, 0, 0, 2,  -41, 175,   76,  17},
          { 0, 2,-2, 2, 0, -8, 11,  0, 0, 0, 0, 0, 0,    0,  15,    6,   0},
          { 0, 0, 0, 0, 0, -8, 13,  0, 0, 0, 0, 0, 1,  425, 212, -133, 269},
          { 0, 1,-1, 1, 0, -8, 12,  0, 0, 0, 0, 0, 0, 1200, 598,  319,-641},
          { 0, 0, 0, 0, 0,  8,-13,  0, 0, 0, 0, 0, 0,  235, 334,    0,   0},
          { 0, 1,-1, 1, 0,  8,-14,  0, 0, 0, 0, 0, 0,   11, -12,   -7,  -6},

       /* 41-50 */
          { 0, 0, 0, 0, 0,  8,-13,  0, 0, 0, 0, 0, 1,    5,  -6,    3,   3},
          {-2, 0, 2, 1, 0,  0,  2,  0,-4, 5, 0, 0, 0,   -5,   0,    0,   3},
          {-2, 0, 2, 2, 0,  3, -3,  0, 0, 0, 0, 0, 0,    6,   0,    0,  -3},
          {-2, 0, 2, 0, 0,  0,  2,  0,-3, 1, 0, 0, 0,   15,   0,    0,   0},
          { 0, 0, 0, 1, 0,  3, -5,  0, 2, 0, 0, 0, 0,   13,   0,    0,  -7},
          {-2, 0, 2, 0, 0,  0,  2,  0,-4, 3, 0, 0, 0,   -6,  -9,    0,   0},
          { 0,-1, 1, 0, 0,  0,  0,  2, 0, 0, 0, 0, 0,  266, -78,    0,   0},
          { 0, 0, 0, 1, 0,  0, -1,  2, 0, 0, 0, 0, 0, -460,-435, -232, 246},
          { 0, 1,-1, 2, 0,  0, -2,  2, 0, 0, 0, 0, 0,    0,  15,    7,   0},
          {-1, 1, 0, 1, 0,  3, -5,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   2},

       /* 51-60 */
          {-1, 0, 1, 0, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0, 131,    0,   0},
          {-2, 0, 2, 0, 0,  0,  2,  0,-2,-2, 0, 0, 0,    4,   0,    0,   0},
          {-2, 2, 0, 2, 0,  0, -5,  9, 0, 0, 0, 0, 0,    0,   3,    0,   0},
          { 0, 1,-1, 1, 0,  0, -1,  0, 0, 0,-1, 0, 0,    0,   4,    2,   0},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 1, 0, 0,    0,   3,    0,   0},
          { 0, 1,-1, 1, 0,  0, -1,  0, 0, 0, 0, 2, 0,  -17, -19,  -10,   9},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 0, 2, 1,   -9, -11,    6,  -5},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 0, 2, 2,   -6,   0,    0,   3},
          {-1, 0, 1, 0, 0,  0,  3, -4, 0, 0, 0, 0, 0,  -16,   8,    0,   0},
          { 0,-1, 1, 0, 0,  0,  1,  0, 0, 2, 0, 0, 0,    0,   3,    0,   0},

       /* 61-70 */
          { 0, 1,-1, 2, 0,  0, -1,  0, 0, 2, 0, 0, 0,   11,  24,   11,  -5},
          { 0, 0, 0, 1, 0,  0, -9, 17, 0, 0, 0, 0, 0,   -3,  -4,   -2,   1},
          { 0, 0, 0, 2, 0, -3,  5,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
          { 0, 1,-1, 1, 0,  0, -1,  0,-1, 2, 0, 0, 0,    0,  -8,   -4,   0},
          { 0, 0, 0, 0, 0,  0,  0,  0, 1,-2, 0, 0, 0,    0,   3,    0,   0},
          { 1, 0,-2, 0, 0, 17,-16,  0,-2, 0, 0, 0, 0,    0,   5,    0,   0},
          { 0, 1,-1, 1, 0,  0, -1,  0, 1,-3, 0, 0, 0,    0,   3,    2,   0},
          {-2, 0, 2, 1, 0,  0,  5, -6, 0, 0, 0, 0, 0,   -6,   4,    2,   3},
          { 0,-2, 2, 0, 0,  0,  9,-13, 0, 0, 0, 0, 0,   -3,  -5,    0,   0},
          { 0, 1,-1, 2, 0,  0, -1,  0, 0, 1, 0, 0, 0,   -5,   0,    0,   2},

       /* 71-80 */
          { 0, 0, 0, 1, 0,  0,  0,  0, 0, 1, 0, 0, 0,    4,  24,   13,  -2},
          { 0,-1, 1, 0, 0,  0,  1,  0, 0, 1, 0, 0, 0,  -42,  20,    0,   0},
          { 0,-2, 2, 0, 0,  5, -6,  0, 0, 0, 0, 0, 0,  -10, 233,    0,   0},
          { 0,-1, 1, 1, 0,  5, -7,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
          {-2, 0, 2, 0, 0,  6, -8,  0, 0, 0, 0, 0, 0,   78, -18,    0,   0},
          { 2, 1,-3, 1, 0, -6,  7,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
          { 0, 0, 0, 2, 0,  0,  0,  0, 1, 0, 0, 0, 0,    0,  -3,   -1,   0},
          { 0,-1, 1, 1, 0,  0,  1,  0, 1, 0, 0, 0, 0,    0,  -4,   -2,   1},
          { 0, 1,-1, 1, 0,  0, -1,  0, 0, 0, 2, 0, 0,    0,  -8,   -4,  -1},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 2, 0, 1,    0,  -5,    3,   0},

       /* 81-90 */
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 2, 0, 2,   -7,   0,    0,   3},
          { 0, 0, 0, 0, 0,  0, -8, 15, 0, 0, 0, 0, 2,  -14,   8,    3,   6},
          { 0, 0, 0, 0, 0,  0, -8, 15, 0, 0, 0, 0, 1,    0,   8,   -4,   0},
          { 0, 1,-1, 1, 0,  0, -9, 15, 0, 0, 0, 0, 0,    0,  19,   10,   0},
          { 0, 0, 0, 0, 0,  0,  8,-15, 0, 0, 0, 0, 0,   45, -22,    0,   0},
          { 1,-1,-1, 0, 0,  0,  8,-15, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
          { 2, 0,-2, 0, 0,  2, -5,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
          {-2, 0, 2, 0, 0,  0,  2,  0,-5, 5, 0, 0, 0,    0,   3,    0,   0},
          { 2, 0,-2, 1, 0,  0, -6,  8, 0, 0, 0, 0, 0,    3,   5,    3,  -2},
          { 2, 0,-2, 1, 0,  0, -2,  0, 3, 0, 0, 0, 0,   89, -16,   -9, -48},

       /* 91-100 */
          {-2, 1, 1, 0, 0,  0,  1,  0,-3, 0, 0, 0, 0,    0,   3,    0,   0},
          {-2, 1, 1, 1, 0,  0,  1,  0,-3, 0, 0, 0, 0,   -3,   7,    4,   2},
          {-2, 0, 2, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0, -349, -62,    0,   0},
          {-2, 0, 2, 0, 0,  0,  6, -8, 0, 0, 0, 0, 0,  -15,  22,    0,   0},
          {-2, 0, 2, 0, 0,  0,  2,  0,-1,-5, 0, 0, 0,   -3,   0,    0,   0},
          {-1, 0, 1, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,  -53,   0,    0,   0},
          {-1, 1, 1, 1, 0,-20, 20,  0, 0, 0, 0, 0, 0,    5,   0,    0,  -3},
          { 1, 0,-2, 0, 0, 20,-21,  0, 0, 0, 0, 0, 0,    0,  -8,    0,   0},
          { 0, 0, 0, 1, 0,  0,  8,-15, 0, 0, 0, 0, 0,   15,  -7,   -4,  -8},
          { 0, 2,-2, 1, 0,  0,-10, 15, 0, 0, 0, 0, 0,   -3,   0,    0,   1},

       /* 101-110 */
          { 0,-1, 1, 0, 0,  0,  1,  0, 1, 0, 0, 0, 0,  -21, -78,    0,   0},
          { 0, 0, 0, 1, 0,  0,  0,  0, 1, 0, 0, 0, 0,   20, -70,  -37, -11},
          { 0, 1,-1, 2, 0,  0, -1,  0, 1, 0, 0, 0, 0,    0,   6,    3,   0},
          { 0, 1,-1, 1, 0,  0, -1,  0,-2, 4, 0, 0, 0,    5,   3,    2,  -2},
          { 2, 0,-2, 1, 0, -6,  8,  0, 0, 0, 0, 0, 0,  -17,  -4,   -2,   9},
          { 0,-2, 2, 1, 0,  5, -6,  0, 0, 0, 0, 0, 0,    0,   6,    3,   0},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0,-1, 0, 0, 1,   32,  15,   -8,  17},
          { 0, 1,-1, 1, 0,  0, -1,  0, 0,-1, 0, 0, 0,  174,  84,   45, -93},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 1, 0, 0, 0,   11,  56,    0,   0},
          { 0, 1,-1, 1, 0,  0, -1,  0, 0, 1, 0, 0, 0,  -66, -12,   -6,  35},

       /* 111-120 */
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 1, 0, 0, 1,   47,   8,    4, -25},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 1, 0, 0, 2,    0,   8,    4,   0},
          { 0, 2,-2, 1, 0,  0, -9, 13, 0, 0, 0, 0, 0,   10, -22,  -12,  -5},
          { 0, 0, 0, 1, 0,  0,  7,-13, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
          {-2, 0, 2, 0, 0,  0,  5, -6, 0, 0, 0, 0, 0,  -24,  12,    0,   0},
          { 0, 0, 0, 0, 0,  0,  9,-17, 0, 0, 0, 0, 0,    5,  -6,    0,   0},
          { 0, 0, 0, 0, 0,  0, -9, 17, 0, 0, 0, 0, 2,    3,   0,    0,  -2},
          { 1, 0,-1, 1, 0,  0, -3,  4, 0, 0, 0, 0, 0,    4,   3,    1,  -2},
          { 1, 0,-1, 1, 0, -3,  4,  0, 0, 0, 0, 0, 0,    0,  29,   15,   0},
          { 0, 0, 0, 2, 0,  0, -1,  2, 0, 0, 0, 0, 0,   -5,  -4,   -2,   2},

       /* 121-130 */
          { 0,-1, 1, 1, 0,  0,  0,  2, 0, 0, 0, 0, 0,    8,  -3,   -1,  -5},
          { 0,-2, 2, 0, 1,  0, -2,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
          { 0, 0, 0, 0, 0,  3, -5,  0, 2, 0, 0, 0, 0,   10,   0,    0,   0},
          {-2, 0, 2, 1, 0,  0,  2,  0,-3, 1, 0, 0, 0,    3,   0,    0,  -2},
          {-2, 0, 2, 1, 0,  3, -3,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   3},
          { 0, 0, 0, 1, 0,  8,-13,  0, 0, 0, 0, 0, 0,   46,  66,   35, -25},
          { 0,-1, 1, 0, 0,  8,-12,  0, 0, 0, 0, 0, 0,  -14,   7,    0,   0},
          { 0, 2,-2, 1, 0, -8, 11,  0, 0, 0, 0, 0, 0,    0,   3,    2,   0},
          {-1, 0, 1, 0, 0,  0,  2, -2, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
          {-1, 0, 0, 1, 0, 18,-16,  0, 0, 0, 0, 0, 0,  -68, -34,  -18,  36},

       /* 131-140 */
          { 0, 1,-1, 1, 0,  0, -1,  0,-1, 1, 0, 0, 0,    0,  14,    7,   0},
          { 0, 0, 0, 1, 0,  3, -7,  4, 0, 0, 0, 0, 0,   10,  -6,   -3,  -5},
          {-2, 1, 1, 1, 0,  0, -3,  7, 0, 0, 0, 0, 0,   -5,  -4,   -2,   3},
          { 0, 1,-1, 2, 0,  0, -1,  0,-2, 5, 0, 0, 0,   -3,   5,    2,   1},
          { 0, 0, 0, 1, 0,  0,  0,  0,-2, 5, 0, 0, 0,   76,  17,    9, -41},
          { 0, 0, 0, 1, 0,  0, -4,  8,-3, 0, 0, 0, 0,   84, 298,  159, -45},
          { 1, 0, 0, 1, 0,-10,  3,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
          { 0, 2,-2, 1, 0,  0, -2,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
          {-1, 0, 0, 1, 0, 10, -3,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
          { 0, 0, 0, 1, 0,  0,  4, -8, 3, 0, 0, 0, 0,  -82, 292,  156,  44},

       /* 141-150 */
          { 0, 0, 0, 1, 0,  0,  0,  0, 2,-5, 0, 0, 0,  -73,  17,    9,  39},
          { 0,-1, 1, 0, 0,  0,  1,  0, 2,-5, 0, 0, 0,   -9, -16,    0,   0},
          { 2,-1,-1, 1, 0,  0,  3, -7, 0, 0, 0, 0, 0,    3,   0,   -1,  -2},
          {-2, 0, 2, 0, 0,  0,  2,  0, 0,-5, 0, 0, 0,   -3,   0,    0,   0},
          { 0, 0, 0, 1, 0, -3,  7, -4, 0, 0, 0, 0, 0,   -9,  -5,   -3,   5},
          {-2, 0, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0, -439,   0,    0,   0},
          { 1, 0, 0, 1, 0,-18, 16,  0, 0, 0, 0, 0, 0,   57, -28,  -15, -30},
          {-2, 1, 1, 1, 0,  0,  1,  0,-2, 0, 0, 0, 0,    0,  -6,   -3,   0},
          { 0, 1,-1, 2, 0, -8, 12,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   2},
          { 0, 0, 0, 1, 0, -8, 13,  0, 0, 0, 0, 0, 0,  -40,  57,   30,  21},

       /* 151-160 */
          { 0, 0, 0, 0, 0,  0,  1, -2, 0, 0, 0, 0, 1,   23,   7,    3, -13},
          { 0, 1,-1, 1, 0,  0,  0, -2, 0, 0, 0, 0, 0,  273,  80,   43,-146},
          { 0, 0, 0, 0, 0,  0,  1, -2, 0, 0, 0, 0, 0, -449, 430,    0,   0},
          { 0, 1,-1, 1, 0,  0, -2,  2, 0, 0, 0, 0, 0,   -8, -47,  -25,   4},
          { 0, 0, 0, 0, 0,  0, -1,  2, 0, 0, 0, 0, 1,    6,  47,   25,  -3},
          {-1, 0, 1, 1, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0,  23,   13,   0},
          {-1, 0, 1, 1, 0,  0,  3, -4, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
          { 0, 1,-1, 1, 0,  0, -1,  0, 0,-2, 0, 0, 0,    3,  -4,   -2,  -2},
          { 0, 1,-1, 1, 0,  0, -1,  0, 0, 2, 0, 0, 0,  -48,-110,  -59,  26},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 2, 0, 0, 1,   51, 114,   61, -27},

       /* 161-170 */
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 2, 0, 0, 2, -133,   0,    0,  57},
          { 0, 1,-1, 0, 0,  3, -6,  0, 0, 0, 0, 0, 0,    0,   4,    0,   0},
          { 0, 0, 0, 1, 0, -3,  5,  0, 0, 0, 0, 0, 0,  -21,  -6,   -3,  11},
          { 0, 1,-1, 2, 0, -3,  4,  0, 0, 0, 0, 0, 0,    0,  -3,   -1,   0},
          { 0, 0, 0, 1, 0,  0, -2,  4, 0, 0, 0, 0, 0,  -11, -21,  -11,   6},
          { 0, 2,-2, 1, 0, -5,  6,  0, 0, 0, 0, 0, 0,  -18,-436, -233,   9},
          { 0,-1, 1, 0, 0,  5, -7,  0, 0, 0, 0, 0, 0,   35,  -7,    0,   0},
          { 0, 0, 0, 1, 0,  5, -8,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
          {-2, 0, 2, 1, 0,  6, -8,  0, 0, 0, 0, 0, 0,   11,  -3,   -1,  -6},
          { 0, 0, 0, 1, 0,  0, -8, 15, 0, 0, 0, 0, 0,   -5,  -3,   -1,   3},

       /* 171-180 */
          {-2, 0, 2, 1, 0,  0,  2,  0,-3, 0, 0, 0, 0,  -53,  -9,   -5,  28},
          {-2, 0, 2, 1, 0,  0,  6, -8, 0, 0, 0, 0, 0,    0,   3,    2,   1},
          { 1, 0,-1, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,    4,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  0,  0,  0, 3,-5, 0, 0, 0,    0,  -4,    0,   0},
          { 0, 1,-1, 1, 0,  0, -1,  0,-1, 0, 0, 0, 0,  -50, 194,  103,  27},
          { 0, 0, 0, 0, 0,  0,  0,  0,-1, 0, 0, 0, 1,  -13,  52,   28,   7},
          { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 0,  -91, 248,    0,   0},
          { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 1,    6,  49,   26,  -3},
          { 0, 1,-1, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,   -6, -47,  -25,   3},
          { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 1,    0,   5,    3,   0},

       /* 181-190 */
          { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 2,   52,  23,   10, -23},
          { 0, 1,-1, 2, 0,  0, -1,  0, 0,-1, 0, 0, 0,   -3,   0,    0,   1},
          { 0, 0, 0, 1, 0,  0,  0,  0, 0,-1, 0, 0, 0,    0,   5,    3,   0},
          { 0,-1, 1, 0, 0,  0,  1,  0, 0,-1, 0, 0, 0,   -4,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0, -7, 13, 0, 0, 0, 0, 2,   -4,   8,    3,   2},
          { 0, 0, 0, 0, 0,  0,  7,-13, 0, 0, 0, 0, 0,   10,   0,    0,   0},
          { 2, 0,-2, 1, 0,  0, -5,  6, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
          { 0, 2,-2, 1, 0,  0, -8, 11, 0, 0, 0, 0, 0,    0,   8,    4,   0},
          { 0, 2,-2, 1,-1,  0,  2,  0, 0, 0, 0, 0, 0,    0,   8,    4,   1},
          {-2, 0, 2, 0, 0,  0,  4, -4, 0, 0, 0, 0, 0,   -4,   0,    0,   0},

       /* 191-200 */
          { 0, 0, 0, 0, 0,  0,  0,  0, 2,-2, 0, 0, 0,   -4,   0,    0,   0},
          { 0, 1,-1, 1, 0,  0, -1,  0, 0, 3, 0, 0, 0,   -8,   4,    2,   4},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 3, 0, 0, 1,    8,  -4,   -2,  -4},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 3, 0, 0, 2,    0,  15,    7,   0},
          {-2, 0, 2, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0, -138,   0,    0,   0},
          { 0, 0, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,  -7,   -3,   0},
          { 0, 0, 0, 2, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -7,   -3,   0},
          { 2, 0,-2, 1, 0,  0, -2,  0, 2, 0, 0, 0, 0,   54,   0,    0, -29},
          { 0, 1,-1, 2, 0,  0, -1,  0, 2, 0, 0, 0, 0,    0,  10,    4,   0},
          { 0, 1,-1, 2, 0,  0,  0, -2, 0, 0, 0, 0, 0,   -7,   0,    0,   3},

       /* 201-210 */
          { 0, 0, 0, 1, 0,  0,  1, -2, 0, 0, 0, 0, 0,  -37,  35,   19,  20},
          { 0,-1, 1, 0, 0,  0,  2, -2, 0, 0, 0, 0, 0,    0,   4,    0,   0},
          { 0,-1, 1, 0, 0,  0,  1,  0, 0,-2, 0, 0, 0,   -4,   9,    0,   0},
          { 0, 2,-2, 1, 0,  0, -2,  0, 0, 2, 0, 0, 0,    8,   0,    0,  -4},
          { 0, 1,-1, 1, 0,  3, -6,  0, 0, 0, 0, 0, 0,   -9, -14,   -8,   5},
          { 0, 0, 0, 0, 0,  3, -5,  0, 0, 0, 0, 0, 1,   -3,  -9,   -5,   3},
          { 0, 0, 0, 0, 0,  3, -5,  0, 0, 0, 0, 0, 0, -145,  47,    0,   0},
          { 0, 1,-1, 1, 0, -3,  4,  0, 0, 0, 0, 0, 0,  -10,  40,   21,   5},
          { 0, 0, 0, 0, 0, -3,  5,  0, 0, 0, 0, 0, 1,   11, -49,  -26,  -7},
          { 0, 0, 0, 0, 0, -3,  5,  0, 0, 0, 0, 0, 2,-2150,   0,    0, 932},

       /* 211-220 */
          { 0, 2,-2, 2, 0, -3,  3,  0, 0, 0, 0, 0, 0,  -12,   0,    0,   5},
          { 0, 0, 0, 0, 0, -3,  5,  0, 0, 0, 0, 0, 2,   85,   0,    0, -37},
          { 0, 0, 0, 0, 0,  0,  2, -4, 0, 0, 0, 0, 1,    4,   0,    0,  -2},
          { 0, 1,-1, 1, 0,  0,  1, -4, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  0,  2, -4, 0, 0, 0, 0, 0,  -86, 153,    0,   0},
          { 0, 0, 0, 0, 0,  0, -2,  4, 0, 0, 0, 0, 1,   -6,   9,    5,   3},
          { 0, 1,-1, 1, 0,  0, -3,  4, 0, 0, 0, 0, 0,    9, -13,   -7,  -5},
          { 0, 0, 0, 0, 0,  0, -2,  4, 0, 0, 0, 0, 1,   -8,  12,    6,   4},
          { 0, 0, 0, 0, 0,  0, -2,  4, 0, 0, 0, 0, 2,  -51,   0,    0,  22},
          { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 2,  -11,-268, -116,   5},

       /* 221-230 */
          { 0, 2,-2, 2, 0, -5,  6,  0, 0, 0, 0, 0, 0,    0,  12,    5,   0},
          { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 2,    0,   7,    3,   0},
          { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 1,   31,   6,    3, -17},
          { 0, 1,-1, 1, 0, -5,  7,  0, 0, 0, 0, 0, 0,  140,  27,   14, -75},
          { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 1,   57,  11,    6, -30},
          { 0, 0, 0, 0, 0,  5, -8,  0, 0, 0, 0, 0, 0,  -14, -39,    0,   0},
          { 0, 1,-1, 2, 0,  0, -1,  0,-1, 0, 0, 0, 0,    0,  -6,   -2,   0},
          { 0, 0, 0, 1, 0,  0,  0,  0,-1, 0, 0, 0, 0,    4,  15,    8,  -2},
          { 0,-1, 1, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    0,   4,    0,   0},
          { 0, 2,-2, 1, 0,  0, -2,  0, 1, 0, 0, 0, 0,   -3,   0,    0,   1},

       /* 231-240 */
          { 0, 0, 0, 0, 0,  0, -6, 11, 0, 0, 0, 0, 2,    0,  11,    5,   0},
          { 0, 0, 0, 0, 0,  0,  6,-11, 0, 0, 0, 0, 0,    9,   6,    0,   0},
          { 0, 0, 0, 0,-1,  0,  4,  0, 0, 0, 0, 0, 2,   -4,  10,    4,   2},
          { 0, 0, 0, 0, 1,  0, -4,  0, 0, 0, 0, 0, 0,    5,   3,    0,   0},
          { 2, 0,-2, 1, 0, -3,  3,  0, 0, 0, 0, 0, 0,   16,   0,    0,  -9},
          {-2, 0, 2, 0, 0,  0,  2,  0, 0,-2, 0, 0, 0,   -3,   0,    0,   0},
          { 0, 2,-2, 1, 0,  0, -7,  9, 0, 0, 0, 0, 0,    0,   3,    2,  -1},
          { 0, 0, 0, 0, 0,  0,  0,  0, 4,-5, 0, 0, 2,    7,   0,    0,  -3},
          { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 0,  -25,  22,    0,   0},
          { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 1,   42, 223,  119, -22},

       /* 241-250 */
          { 0, 1,-1, 1, 0,  0, -1,  0, 2, 0, 0, 0, 0,  -27,-143,  -77,  14},
          { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 1,    9,  49,   26,  -5},
          { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 2,-1166,   0,    0, 505},
          { 0, 2,-2, 2, 0,  0, -2,  0, 2, 0, 0, 0, 0,   -5,   0,    0,   2},
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 5, 0, 0, 2,   -6,   0,    0,   3},
          { 0, 0, 0, 1, 0,  3, -5,  0, 0, 0, 0, 0, 0,   -8,   0,    1,   4},
          { 0,-1, 1, 0, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
          { 0, 2,-2, 1, 0, -3,  3,  0, 0, 0, 0, 0, 0,  117,   0,    0, -63},
          { 0, 0, 0, 1, 0,  0,  2, -4, 0, 0, 0, 0, 0,   -4,   8,    4,   2},
          { 0, 2,-2, 1, 0,  0, -4,  4, 0, 0, 0, 0, 0,    3,   0,    0,  -2},

       /* 251-260 */
          { 0, 1,-1, 2, 0, -5,  7,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   2},
          { 0, 0, 0, 0, 0,  0,  3, -6, 0, 0, 0, 0, 0,    0,  31,    0,   0},
          { 0, 0, 0, 0, 0,  0, -3,  6, 0, 0, 0, 0, 1,   -5,   0,    1,   3},
          { 0, 1,-1, 1, 0,  0, -4,  6, 0, 0, 0, 0, 0,    4,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  0, -3,  6, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
          { 0, 0, 0, 0, 0,  0, -3,  6, 0, 0, 0, 0, 2,  -24, -13,   -6,  10},
          { 0,-1, 1, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    3,   0,    0,   0},
          { 0, 0, 0, 1, 0,  2, -3,  0, 0, 0, 0, 0, 0,    0, -32,  -17,   0},
          { 0, 0, 0, 0, 0,  0, -5,  9, 0, 0, 0, 0, 2,    8,  12,    5,  -3},
          { 0, 0, 0, 0, 0,  0, -5,  9, 0, 0, 0, 0, 1,    3,   0,    0,  -1},

       /* 261-270 */
          { 0, 0, 0, 0, 0,  0,  5, -9, 0, 0, 0, 0, 0,    7,  13,    0,   0},
          { 0,-1, 1, 0, 0,  0,  1,  0,-2, 0, 0, 0, 0,   -3,  16,    0,   0},
          { 0, 2,-2, 1, 0,  0, -2,  0, 2, 0, 0, 0, 0,   50,   0,    0, -27},
          {-2, 1, 1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -5,   -3,   0},
          { 0,-2, 2, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,   13,   0,    0,   0},
          { 0, 0, 0, 0, 0, -6, 10,  0, 0, 0, 0, 0, 1,    0,   5,    3,   1},
          { 0, 0, 0, 0, 0, -6, 10,  0, 0, 0, 0, 0, 2,   24,   5,    2, -11},
          { 0, 0, 0, 0, 0, -2,  3,  0, 0, 0, 0, 0, 2,    5, -11,   -5,  -2},
          { 0, 0, 0, 0, 0, -2,  3,  0, 0, 0, 0, 0, 1,   30,  -3,   -2, -16},
          { 0, 1,-1, 1, 0, -2,  2,  0, 0, 0, 0, 0, 0,   18,   0,    0,  -9},

       /* 271-280 */
          { 0, 0, 0, 0, 0,  2, -3,  0, 0, 0, 0, 0, 0,    8, 614,    0,   0},
          { 0, 0, 0, 0, 0,  2, -3,  0, 0, 0, 0, 0, 1,    3,  -3,   -1,  -2},
          { 0, 0, 0, 0, 0,  0,  0,  0, 3, 0, 0, 0, 1,    6,  17,    9,  -3},
          { 0, 1,-1, 1, 0,  0, -1,  0, 3, 0, 0, 0, 0,   -3,  -9,   -5,   2},
          { 0, 0, 0, 0, 0,  0,  0,  0, 3, 0, 0, 0, 1,    0,   6,    3,  -1},
          { 0, 0, 0, 0, 0,  0,  0,  0, 3, 0, 0, 0, 2, -127,  21,    9,  55},
          { 0, 0, 0, 0, 0,  0,  4, -8, 0, 0, 0, 0, 0,    3,   5,    0,   0},
          { 0, 0, 0, 0, 0,  0, -4,  8, 0, 0, 0, 0, 2,   -6, -10,   -4,   3},
          { 0,-2, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,    5,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0, -4,  7, 0, 0, 0, 0, 2,   16,   9,    4,  -7},

       /* 281-290 */
          { 0, 0, 0, 0, 0,  0, -4,  7, 0, 0, 0, 0, 1,    3,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  0,  4, -7, 0, 0, 0, 0, 0,    0,  22,    0,   0},
          { 0, 0, 0, 1, 0, -2,  3,  0, 0, 0, 0, 0, 0,    0,  19,   10,   0},
          { 0, 2,-2, 1, 0,  0, -2,  0, 3, 0, 0, 0, 0,    7,   0,    0,  -4},
          { 0, 0, 0, 0, 0,  0, -5, 10, 0, 0, 0, 0, 2,    0,  -5,   -2,   0},
          { 0, 0, 0, 1, 0, -1,  2,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
          { 0, 0, 0, 0, 0,  0,  0,  0, 4, 0, 0, 0, 2,   -9,   3,    1,   4},
          { 0, 0, 0, 0, 0,  0, -3,  5, 0, 0, 0, 0, 2,   17,   0,    0,  -7},
          { 0, 0, 0, 0, 0,  0, -3,  5, 0, 0, 0, 0, 1,    0,  -3,   -2,  -1},
          { 0, 0, 0, 0, 0,  0,  3, -5, 0, 0, 0, 0, 0,  -20,  34,    0,   0},

       /* 291-300 */
          { 0, 0, 0, 0, 0,  1, -2,  0, 0, 0, 0, 0, 1,  -10,   0,    1,   5},
          { 0, 1,-1, 1, 0,  1, -3,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   2},
          { 0, 0, 0, 0, 0,  1, -2,  0, 0, 0, 0, 0, 0,   22, -87,    0,   0},
          { 0, 0, 0, 0, 0, -1,  2,  0, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
          { 0, 0, 0, 0, 0, -1,  2,  0, 0, 0, 0, 0, 2,   -3,  -6,   -2,   1},
          { 0, 0, 0, 0, 0, -7, 11,  0, 0, 0, 0, 0, 2,  -16,  -3,   -1,   7},
          { 0, 0, 0, 0, 0, -7, 11,  0, 0, 0, 0, 0, 1,    0,  -3,   -2,   0},
          { 0,-2, 2, 0, 0,  4, -4,  0, 0, 0, 0, 0, 0,    4,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  2, -3, 0, 0, 0, 0, 0,  -68,  39,    0,   0},
          { 0, 2,-2, 1, 0, -4,  4,  0, 0, 0, 0, 0, 0,   27,   0,    0, -14},

       /* 301-310 */
          { 0,-1, 1, 0, 0,  4, -5,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
          { 0, 0, 0, 0, 0,  0,  1, -1, 0, 0, 0, 0, 0,  -25,   0,    0,   0},
          { 0, 0, 0, 0, 0, -4,  7,  0, 0, 0, 0, 0, 1,  -12,  -3,   -2,   6},
          { 0, 1,-1, 1, 0, -4,  6,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
          { 0, 0, 0, 0, 0, -4,  7,  0, 0, 0, 0, 0, 2,    3,  66,   29,  -1},
          { 0, 0, 0, 0, 0, -4,  6,  0, 0, 0, 0, 0, 2,  490,   0,    0,-213},
          { 0, 0, 0, 0, 0, -4,  6,  0, 0, 0, 0, 0, 1,  -22,  93,   49,  12},
          { 0, 1,-1, 1, 0, -4,  5,  0, 0, 0, 0, 0, 0,   -7,  28,   15,   4},
          { 0, 0, 0, 0, 0, -4,  6,  0, 0, 0, 0, 0, 1,   -3,  13,    7,   2},
          { 0, 0, 0, 0, 0,  4, -6,  0, 0, 0, 0, 0, 0,  -46,  14,    0,   0},

       /* 311-320 */
          {-2, 0, 2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  0,  1, 0, 0, 0, 0, 0,    2,   1,    0,   0},
          { 0,-1, 1, 0, 0,  1,  0,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
          { 0, 0, 0, 1, 0,  1, -1,  0, 0, 0, 0, 0, 0,  -28,   0,    0,  15},
          { 0, 0, 0, 0, 0,  0, -1,  0, 5, 0, 0, 0, 2,    5,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  0,  1, -3, 0, 0, 0, 0, 0,    0,   3,    0,   0},
          { 0, 0, 0, 0, 0,  0, -1,  3, 0, 0, 0, 0, 2,  -11,   0,    0,   5},
          { 0, 0, 0, 0, 0,  0, -7, 12, 0, 0, 0, 0, 2,    0,   3,    1,   0},
          { 0, 0, 0, 0, 0, -1,  1,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
          { 0, 0, 0, 0, 0, -1,  1,  0, 0, 0, 0, 0, 1,   25, 106,   57, -13},

       /* 321-330 */
          { 0, 1,-1, 1, 0, -1,  0,  0, 0, 0, 0, 0, 0,    5,  21,   11,  -3},
          { 0, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0, 1485,   0,    0,   0},
          { 0, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 1,   -7, -32,  -17,   4},
          { 0, 1,-1, 1, 0,  1, -2,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
          { 0, 0, 0, 0, 0,  0, -2,  5, 0, 0, 0, 0, 2,   -6,  -3,   -2,   3},
          { 0, 0, 0, 0, 0,  0, -1,  0, 4, 0, 0, 0, 2,   30,  -6,   -2, -13},
          { 0, 0, 0, 0, 0,  0,  1,  0,-4, 0, 0, 0, 0,   -4,   4,    0,   0},
          { 0, 0, 0, 1, 0, -1,  1,  0, 0, 0, 0, 0, 0,  -19,   0,    0,  10},
          { 0, 0, 0, 0, 0,  0, -6, 10, 0, 0, 0, 0, 2,    0,   4,    2,  -1},
          { 0, 0, 0, 0, 0,  0, -6, 10, 0, 0, 0, 0, 0,    0,   3,    0,   0},

       /* 331-340 */
          { 0, 2,-2, 1, 0,  0, -3,  0, 3, 0, 0, 0, 0,    4,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  0, -3,  7, 0, 0, 0, 0, 2,    0,  -3,   -1,   0},
          {-2, 0, 2, 0, 0,  4, -4,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0, -5,  8, 0, 0, 0, 0, 2,    5,   3,    1,  -2},
          { 0, 0, 0, 0, 0,  0,  5, -8, 0, 0, 0, 0, 0,    0,  11,    0,   0},
          { 0, 0, 0, 0, 0,  0, -1,  0, 3, 0, 0, 0, 2,  118,   0,    0, -52},
          { 0, 0, 0, 0, 0,  0, -1,  0, 3, 0, 0, 0, 1,    0,  -5,   -3,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0,-3, 0, 0, 0, 0,  -28,  36,    0,   0},
          { 0, 0, 0, 0, 0,  2, -4,  0, 0, 0, 0, 0, 0,    5,  -5,    0,   0},
          { 0, 0, 0, 0, 0, -2,  4,  0, 0, 0, 0, 0, 1,   14, -59,  -31,  -8},

       /* 341-350 */
          { 0, 1,-1, 1, 0, -2,  3,  0, 0, 0, 0, 0, 0,    0,   9,    5,   1},
          { 0, 0, 0, 0, 0, -2,  4,  0, 0, 0, 0, 0, 2, -458,   0,    0, 198},
          { 0, 0, 0, 0, 0, -6,  9,  0, 0, 0, 0, 0, 2,    0, -45,  -20,   0},
          { 0, 0, 0, 0, 0, -6,  9,  0, 0, 0, 0, 0, 1,    9,   0,    0,  -5},
          { 0, 0, 0, 0, 0,  6, -9,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
          { 0, 0, 0, 1, 0,  0,  1,  0,-2, 0, 0, 0, 0,    0,  -4,   -2,  -1},
          { 0, 2,-2, 1, 0, -2,  2,  0, 0, 0, 0, 0, 0,   11,   0,    0,  -6},
          { 0, 0, 0, 0, 0,  0, -4,  6, 0, 0, 0, 0, 2,    6,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  0,  4, -6, 0, 0, 0, 0, 0,  -16,  23,    0,   0},
          { 0, 0, 0, 1, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0,  -4,   -2,   0},

       /* 351-360 */
          { 0, 0, 0, 0, 0,  0, -1,  0, 2, 0, 0, 0, 2,   -5,   0,    0,   2},
          { 0, 0, 0, 0, 0,  0,  1,  0,-2, 0, 0, 0, 0, -166, 269,    0,   0},
          { 0, 0, 0, 1, 0,  0,  1,  0,-1, 0, 0, 0, 0,   15,   0,    0,  -8},
          { 0, 0, 0, 0, 0, -5,  9,  0, 0, 0, 0, 0, 2,   10,   0,    0,  -4},
          { 0, 0, 0, 0, 0,  0,  3, -4, 0, 0, 0, 0, 0,  -78,  45,    0,   0},
          { 0, 0, 0, 0, 0, -3,  4,  0, 0, 0, 0, 0, 2,    0,  -5,   -2,   0},
          { 0, 0, 0, 0, 0, -3,  4,  0, 0, 0, 0, 0, 1,    7,   0,    0,  -4},
          { 0, 0, 0, 0, 0,  3, -4,  0, 0, 0, 0, 0, 0,   -5, 328,    0,   0},
          { 0, 0, 0, 0, 0,  3, -4,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -2},
          { 0, 0, 0, 1, 0,  0,  2, -2, 0, 0, 0, 0, 0,    5,   0,    0,  -2},

       /* 361-370 */
          { 0, 0, 0, 1, 0,  0, -1,  0, 2, 0, 0, 0, 0,    0,   3,    1,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0, 0,-3, 0, 0, 0,   -3,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0, 1,-5, 0, 0, 0,   -3,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0, -1,  0, 1, 0, 0, 0, 1,    0,  -4,   -2,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,-1223, -26,    0,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 1,    0,   7,    3,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0,-3, 5, 0, 0, 0,    3,   0,    0,   0},
          { 0, 0, 0, 1, 0, -3,  4,  0, 0, 0, 0, 0, 0,    0,   3,    2,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0, 0,-2, 0, 0, 0,   -6,  20,    0,   0},
          { 0, 0, 0, 0, 0,  0,  2, -2, 0, 0, 0, 0, 0, -368,   0,    0,   0},

       /* 371-380 */
          { 0, 0, 0, 0, 0,  0,  1,  0, 0,-1, 0, 0, 0,  -75,   0,    0,   0},
          { 0, 0, 0, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,   11,   0,    0,  -6},
          { 0, 0, 0, 1, 0,  0, -2,  2, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
          { 0, 0, 0, 0, 0, -8, 14,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
          { 0, 0, 0, 0, 0,  0,  1,  0, 2,-5, 0, 0, 0,  -13, -30,    0,   0},
          { 0, 0, 0, 0, 0,  0,  5, -8, 3, 0, 0, 0, 0,   21,   3,    0,   0},
          { 0, 0, 0, 0, 0,  0,  5, -8, 3, 0, 0, 0, 2,   -3,   0,    0,   1},
          { 0, 0, 0, 0, 0,  0, -1,  0, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
          { 0, 0, 0, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    8, -27,    0,   0},
          { 0, 0, 0, 0, 0,  0,  3, -8, 3, 0, 0, 0, 0,  -19, -11,    0,   0},

       /* 381-390 */
          { 0, 0, 0, 0, 0,  0, -3,  8,-3, 0, 0, 0, 2,   -4,   0,    0,   2},
          { 0, 0, 0, 0, 0,  0,  1,  0,-2, 5, 0, 0, 2,    0,   5,    2,   0},
          { 0, 0, 0, 0, 0, -8, 12,  0, 0, 0, 0, 0, 2,   -6,   0,    0,   2},
          { 0, 0, 0, 0, 0, -8, 12,  0, 0, 0, 0, 0, 0,   -8,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0, 1,-2, 0, 0, 0,   -1,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0, 0, 1, 0, 0, 2,  -14,   0,    0,   6},
          { 0, 0, 0, 0, 0,  0,  0,  2, 0, 0, 0, 0, 0,    6,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  0,  2, 0, 0, 0, 0, 2,  -74,   0,    0,  32},
          { 0, 0, 0, 0, 0,  0,  1,  0, 0, 2, 0, 0, 2,    0,  -3,   -1,   0},
          { 0, 2,-2, 1, 0, -5,  5,  0, 0, 0, 0, 0, 0,    4,   0,    0,  -2},

       /* 391-400 */
          { 0, 0, 0, 0, 0,  0,  1,  0, 1, 0, 0, 0, 0,    8,  11,    0,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0, 1, 0, 0, 0, 1,    0,   3,    2,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0, 1, 0, 0, 0, 2, -262,   0,    0, 114},
          { 0, 0, 0, 0, 0,  3, -6,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
          { 0, 0, 0, 0, 0, -3,  6,  0, 0, 0, 0, 0, 1,   -7,   0,    0,   4},
          { 0, 0, 0, 0, 0, -3,  6,  0, 0, 0, 0, 0, 2,    0, -27,  -12,   0},
          { 0, 0, 0, 0, 0,  0, -1,  4, 0, 0, 0, 0, 2,  -19,  -8,   -4,   8},
          { 0, 0, 0, 0, 0, -5,  7,  0, 0, 0, 0, 0, 2,  202,   0,    0, -87},
          { 0, 0, 0, 0, 0, -5,  7,  0, 0, 0, 0, 0, 1,   -8,  35,   19,   5},
          { 0, 1,-1, 1, 0, -5,  6,  0, 0, 0, 0, 0, 0,    0,   4,    2,   0},

       /* 401-410 */
          { 0, 0, 0, 0, 0,  5, -7,  0, 0, 0, 0, 0, 0,   16,  -5,    0,   0},
          { 0, 2,-2, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,    5,   0,    0,  -3},
          { 0, 0, 0, 0, 0,  0, -1,  0, 1, 0, 0, 0, 0,    0,  -3,    0,   0},
          { 0, 0, 0, 0,-1,  0,  3,  0, 0, 0, 0, 0, 2,    1,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  1,  0, 2, 0, 0, 0, 2,  -35, -48,  -21,  15},
          { 0, 0, 0, 0, 0,  0, -2,  6, 0, 0, 0, 0, 2,   -3,  -5,   -2,   1},
          { 0, 0, 0, 1, 0,  2, -2,  0, 0, 0, 0, 0, 0,    6,   0,    0,  -3},
          { 0, 0, 0, 0, 0,  0, -6,  9, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
          { 0, 0, 0, 0, 0,  0,  6, -9, 0, 0, 0, 0, 0,    0,  -5,    0,   0},
          { 0, 0, 0, 0, 0, -2,  2,  0, 0, 0, 0, 0, 1,   12,  55,   29,  -6},

       /* 411-420 */
          { 0, 1,-1, 1, 0, -2,  1,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
          { 0, 0, 0, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0, -598,   0,    0,   0},
          { 0, 0, 0, 0, 0,  2, -2,  0, 0, 0, 0, 0, 1,   -3, -13,   -7,   1},
          { 0, 0, 0, 0, 0,  0,  1,  0, 3, 0, 0, 0, 2,   -5,  -7,   -3,   2},
          { 0, 0, 0, 0, 0,  0, -5,  7, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
          { 0, 0, 0, 0, 0,  0,  5, -7, 0, 0, 0, 0, 0,    5,  -7,    0,   0},
          { 0, 0, 0, 1, 0, -2,  2,  0, 0, 0, 0, 0, 0,    4,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  0,  4, -5, 0, 0, 0, 0, 0,   16,  -6,    0,   0},
          { 0, 0, 0, 0, 0,  1, -3,  0, 0, 0, 0, 0, 0,    8,  -3,    0,   0},
          { 0, 0, 0, 0, 0, -1,  3,  0, 0, 0, 0, 0, 1,    8, -31,  -16,  -4},

       /* 421-430 */
          { 0, 1,-1, 1, 0, -1,  2,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
          { 0, 0, 0, 0, 0, -1,  3,  0, 0, 0, 0, 0, 2,  113,   0,    0, -49},
          { 0, 0, 0, 0, 0, -7, 10,  0, 0, 0, 0, 0, 2,    0, -24,  -10,   0},
          { 0, 0, 0, 0, 0, -7, 10,  0, 0, 0, 0, 0, 1,    4,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  0,  3, -3, 0, 0, 0, 0, 0,   27,   0,    0,   0},
          { 0, 0, 0, 0, 0, -4,  8,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
          { 0, 0, 0, 0, 0, -4,  5,  0, 0, 0, 0, 0, 2,    0,  -4,   -2,   0},
          { 0, 0, 0, 0, 0, -4,  5,  0, 0, 0, 0, 0, 1,    5,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  4, -5,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
          { 0, 0, 0, 0, 0,  0,  1,  1, 0, 0, 0, 0, 2,  -13,   0,    0,   6},

       /* 431-440 */
          { 0, 0, 0, 0, 0,  0, -2,  0, 5, 0, 0, 0, 2,    5,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  0,  0,  3, 0, 0, 0, 0, 2,  -18, -10,   -4,   8},
          { 0, 0, 0, 0, 0,  1,  0,  0, 0, 0, 0, 0, 0,   -4, -28,    0,   0},
          { 0, 0, 0, 0, 0,  1,  0,  0, 0, 0, 0, 0, 2,   -5,   6,    3,   2},
          { 0, 0, 0, 0, 0, -9, 13,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
          { 0, 0, 0, 0, 0,  0, -1,  5, 0, 0, 0, 0, 2,   -5,  -9,   -4,   2},
          { 0, 0, 0, 0, 0,  0, -2,  0, 4, 0, 0, 0, 2,   17,   0,    0,  -7},
          { 0, 0, 0, 0, 0,  0,  2,  0,-4, 0, 0, 0, 0,   11,   4,    0,   0},
          { 0, 0, 0, 0, 0,  0, -2,  7, 0, 0, 0, 0, 2,    0,  -6,   -2,   0},
          { 0, 0, 0, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   83,  15,    0,   0},

       /* 441-450 */
          { 0, 0, 0, 0, 0, -2,  5,  0, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
          { 0, 0, 0, 0, 0, -2,  5,  0, 0, 0, 0, 0, 2,    0,-114,  -49,   0},
          { 0, 0, 0, 0, 0, -6,  8,  0, 0, 0, 0, 0, 2,  117,   0,    0, -51},
          { 0, 0, 0, 0, 0, -6,  8,  0, 0, 0, 0, 0, 1,   -5,  19,   10,   2},
          { 0, 0, 0, 0, 0,  6, -8,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
          { 0, 0, 0, 1, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   2},
          { 0, 0, 0, 0, 0,  0, -3,  9, 0, 0, 0, 0, 2,    0,  -3,   -1,   0},
          { 0, 0, 0, 0, 0,  0,  5, -6, 0, 0, 0, 0, 0,    3,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  5, -6, 0, 0, 0, 0, 2,    0,  -6,   -2,   0},
          { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,  393,   3,    0,   0},

       /* 451-460 */
          { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 1,   -4,  21,   11,   2},
          { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 2,   -6,   0,   -1,   3},
          { 0, 0, 0, 0, 0, -5, 10,  0, 0, 0, 0, 0, 2,   -3,   8,    4,   1},
          { 0, 0, 0, 0, 0,  0,  4, -4, 0, 0, 0, 0, 0,    8,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  4, -4, 0, 0, 0, 0, 2,   18, -29,  -13,  -8},
          { 0, 0, 0, 0, 0, -3,  3,  0, 0, 0, 0, 0, 1,    8,  34,   18,  -4},
          { 0, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,   89,   0,    0,   0},
          { 0, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 1,    3,  12,    6,  -1},
          { 0, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 2,   54, -15,   -7, -24},
          { 0, 0, 0, 0, 0,  0,  2,  0, 0,-3, 0, 0, 0,    0,   3,    0,   0},

       /* 461-470 */
          { 0, 0, 0, 0, 0,  0, -5, 13, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
          { 0, 0, 0, 0, 0,  0,  2,  0,-1, 0, 0, 0, 0,    0,  35,    0,   0},
          { 0, 0, 0, 0, 0,  0,  2,  0,-1, 0, 0, 0, 2, -154, -30,  -13,  67},
          { 0, 0, 0, 0, 0,  0,  2,  0, 0,-2, 0, 0, 0,   15,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  2,  0, 0,-2, 0, 0, 1,    0,   4,    2,   0},
          { 0, 0, 0, 0, 0,  0,  3, -2, 0, 0, 0, 0, 0,    0,   9,    0,   0},
          { 0, 0, 0, 0, 0,  0,  3, -2, 0, 0, 0, 0, 2,   80, -71,  -31, -35},
          { 0, 0, 0, 0, 0,  0,  2,  0, 0,-1, 0, 0, 2,    0, -20,   -9,   0},
          { 0, 0, 0, 0, 0,  0, -6, 15, 0, 0, 0, 0, 2,   11,   5,    2,  -5},
          { 0, 0, 0, 0, 0, -8, 15,  0, 0, 0, 0, 0, 2,   61, -96,  -42, -27},

       /* 471-480 */
          { 0, 0, 0, 0, 0, -3,  9, -4, 0, 0, 0, 0, 2,   14,   9,    4,  -6},
          { 0, 0, 0, 0, 0,  0,  2,  0, 2,-5, 0, 0, 2,  -11,  -6,   -3,   5},
          { 0, 0, 0, 0, 0,  0, -2,  8,-1,-5, 0, 0, 2,    0,  -3,   -1,   0},
          { 0, 0, 0, 0, 0,  0,  6, -8, 3, 0, 0, 0, 2,  123,-415, -180, -53},
          { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 0,    0,   0,    0, -35},
          { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 1,    7, -32,  -17,  -4},
          { 0, 1,-1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -9,   -5,   0},
          { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 1,    0,  -4,    2,   0},
          { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 2,  -89,   0,    0,  38},

       /* 481-490 */
          { 0, 0, 0, 0, 0,  0, -6, 16,-4,-5, 0, 0, 2,    0, -86,  -19,  -6},
          { 0, 0, 0, 0, 0,  0, -2,  8,-3, 0, 0, 0, 2,    0,   0,  -19,   6},
          { 0, 0, 0, 0, 0,  0, -2,  8,-3, 0, 0, 0, 2, -123,-416, -180,  53},
          { 0, 0, 0, 0, 0,  0,  6, -8, 1, 5, 0, 0, 2,    0,  -3,   -1,   0},
          { 0, 0, 0, 0, 0,  0,  2,  0,-2, 5, 0, 0, 2,   12,  -6,   -3,  -5},
          { 0, 0, 0, 0, 0,  3, -5,  4, 0, 0, 0, 0, 2,  -13,   9,    4,   6},
          { 0, 0, 0, 0, 0, -8, 11,  0, 0, 0, 0, 0, 2,    0, -15,   -7,   0},
          { 0, 0, 0, 0, 0, -8, 11,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -1},
          { 0, 0, 0, 0, 0, -8, 11,  0, 0, 0, 0, 0, 2,  -62, -97,  -42,  27},
          { 0, 0, 0, 0, 0,  0, 11,  0, 0, 0, 0, 0, 2,  -11,   5,    2,   5},

       /* 491-500 */
          { 0, 0, 0, 0, 0,  0,  2,  0, 0, 1, 0, 0, 2,    0, -19,   -8,   0},
          { 0, 0, 0, 0, 0,  3, -3,  0, 2, 0, 0, 0, 2,   -3,   0,    0,   1},
          { 0, 2,-2, 1, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,   4,    2,   0},
          { 0, 1,-1, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,   3,    0,   0},
          { 0, 2,-2, 1, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,   4,    2,   0},
          { 0, 0, 0, 0, 0,  0,  1,  2, 0, 0, 0, 0, 2,  -85, -70,  -31,  37},
          { 0, 0, 0, 0, 0,  0,  2,  0, 1, 0, 0, 0, 2,  163, -12,   -5, -72},
          { 0, 0, 0, 0, 0, -3,  7,  0, 0, 0, 0, 0, 2,  -63, -16,   -7,  28},
          { 0, 0, 0, 0, 0,  0,  0,  4, 0, 0, 0, 0, 2,  -21, -32,  -14,   9},
          { 0, 0, 0, 0, 0, -5,  6,  0, 0, 0, 0, 0, 2,    0,  -3,   -1,   0},

       /* 501-510 */
          { 0, 0, 0, 0, 0, -5,  6,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -2},
          { 0, 0, 0, 0, 0,  5, -6,  0, 0, 0, 0, 0, 0,    0,   8,    0,   0},
          { 0, 0, 0, 0, 0,  5, -6,  0, 0, 0, 0, 0, 2,    3,  10,    4,  -1},
          { 0, 0, 0, 0, 0,  0,  2,  0, 2, 0, 0, 0, 2,    3,   0,    0,  -1},
          { 0, 0, 0, 0, 0,  0, -1,  6, 0, 0, 0, 0, 2,    0,  -7,   -3,   0},
          { 0, 0, 0, 0, 0,  0,  7, -9, 0, 0, 0, 0, 2,    0,  -4,   -2,   0},
          { 0, 0, 0, 0, 0,  2, -1,  0, 0, 0, 0, 0, 0,    6,  19,    0,   0},
          { 0, 0, 0, 0, 0,  2, -1,  0, 0, 0, 0, 0, 2,    5,-173,  -75,  -2},
          { 0, 0, 0, 0, 0,  0,  6, -7, 0, 0, 0, 0, 2,    0,  -7,   -3,   0},
          { 0, 0, 0, 0, 0,  0,  5, -5, 0, 0, 0, 0, 2,    7, -12,   -5,  -3},

       /* 511-520 */
          { 0, 0, 0, 0, 0, -1,  4,  0, 0, 0, 0, 0, 1,   -3,   0,    0,   2},
          { 0, 0, 0, 0, 0, -1,  4,  0, 0, 0, 0, 0, 2,    3,  -4,   -2,  -1},
          { 0, 0, 0, 0, 0, -7,  9,  0, 0, 0, 0, 0, 2,   74,   0,    0, -32},
          { 0, 0, 0, 0, 0, -7,  9,  0, 0, 0, 0, 0, 1,   -3,  12,    6,   2},
          { 0, 0, 0, 0, 0,  0,  4, -3, 0, 0, 0, 0, 2,   26, -14,   -6, -11},
          { 0, 0, 0, 0, 0,  0,  3, -1, 0, 0, 0, 0, 2,   19,   0,    0,  -8},
          { 0, 0, 0, 0, 0, -4,  4,  0, 0, 0, 0, 0, 1,    6,  24,   13,  -3},
          { 0, 0, 0, 0, 0,  4, -4,  0, 0, 0, 0, 0, 0,   83,   0,    0,   0},
          { 0, 0, 0, 0, 0,  4, -4,  0, 0, 0, 0, 0, 1,    0, -10,   -5,   0},
          { 0, 0, 0, 0, 0,  4, -4,  0, 0, 0, 0, 0, 2,   11,  -3,   -1,  -5},

       /* 521-530 */
          { 0, 0, 0, 0, 0,  0,  2,  1, 0, 0, 0, 0, 2,    3,   0,    1,  -1},
          { 0, 0, 0, 0, 0,  0, -3,  0, 5, 0, 0, 0, 2,    3,   0,    0,  -1},
          { 0, 0, 0, 0, 0,  1,  1,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
          { 0, 0, 0, 0, 0,  1,  1,  0, 0, 0, 0, 0, 1,    5, -23,  -12,  -3},
          { 0, 0, 0, 0, 0,  1,  1,  0, 0, 0, 0, 0, 2, -339,   0,    0, 147},
          { 0, 0, 0, 0, 0, -9, 12,  0, 0, 0, 0, 0, 2,    0, -10,   -5,   0},
          { 0, 0, 0, 0, 0,  0,  3,  0,-4, 0, 0, 0, 0,    5,   0,    0,   0},
          { 0, 2,-2, 1, 0,  1, -1,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
          { 0, 0, 0, 0, 0,  0,  7, -8, 0, 0, 0, 0, 2,    0,  -4,   -2,   0},
          { 0, 0, 0, 0, 0,  0,  3,  0,-3, 0, 0, 0, 0,   18,  -3,    0,   0},

       /* 531-540 */
          { 0, 0, 0, 0, 0,  0,  3,  0,-3, 0, 0, 0, 2,    9, -11,   -5,  -4},
          { 0, 0, 0, 0, 0, -2,  6,  0, 0, 0, 0, 0, 2,   -8,   0,    0,   4},
          { 0, 0, 0, 0, 0, -6,  7,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -1},
          { 0, 0, 0, 0, 0,  6, -7,  0, 0, 0, 0, 0, 0,    0,   9,    0,   0},
          { 0, 0, 0, 0, 0,  0,  6, -6, 0, 0, 0, 0, 2,    6,  -9,   -4,  -2},
          { 0, 0, 0, 0, 0,  0,  3,  0,-2, 0, 0, 0, 0,   -4, -12,    0,   0},
          { 0, 0, 0, 0, 0,  0,  3,  0,-2, 0, 0, 0, 2,   67, -91,  -39, -29},
          { 0, 0, 0, 0, 0,  0,  5, -4, 0, 0, 0, 0, 2,   30, -18,   -8, -13},
          { 0, 0, 0, 0, 0,  3, -2,  0, 0, 0, 0, 0, 0,    0,   0,    0,   0},
          { 0, 0, 0, 0, 0,  3, -2,  0, 0, 0, 0, 0, 2,    0,-114,  -50,   0},

       /* 541-550 */
          { 0, 0, 0, 0, 0,  0,  3,  0,-1, 0, 0, 0, 2,    0,   0,    0,  23},
          { 0, 0, 0, 0, 0,  0,  3,  0,-1, 0, 0, 0, 2,  517,  16,    7,-224},
          { 0, 0, 0, 0, 0,  0,  3,  0, 0,-2, 0, 0, 2,    0,  -7,   -3,   0},
          { 0, 0, 0, 0, 0,  0,  4, -2, 0, 0, 0, 0, 2,  143,  -3,   -1, -62},
          { 0, 0, 0, 0, 0,  0,  3,  0, 0,-1, 0, 0, 2,   29,   0,    0, -13},
          { 0, 2,-2, 1, 0,  0,  1,  0,-1, 0, 0, 0, 0,   -4,   0,    0,   2},
          { 0, 0, 0, 0, 0, -8, 16,  0, 0, 0, 0, 0, 2,   -6,   0,    0,   3},
          { 0, 0, 0, 0, 0,  0,  3,  0, 2,-5, 0, 0, 2,    5,  12,    5,  -2},
          { 0, 0, 0, 0, 0,  0,  7, -8, 3, 0, 0, 0, 2,  -25,   0,    0,  11},
          { 0, 0, 0, 0, 0,  0, -5, 16,-4,-5, 0, 0, 2,   -3,   0,    0,   1},

       /* 551-560 */
          { 0, 0, 0, 0, 0,  0,  3,  0, 0, 0, 0, 0, 2,    0,   4,    2,   0},
          { 0, 0, 0, 0, 0,  0, -1,  8,-3, 0, 0, 0, 2,  -22,  12,    5,  10},
          { 0, 0, 0, 0, 0, -8, 10,  0, 0, 0, 0, 0, 2,   50,   0,    0, -22},
          { 0, 0, 0, 0, 0, -8, 10,  0, 0, 0, 0, 0, 1,    0,   7,    4,   0},
          { 0, 0, 0, 0, 0, -8, 10,  0, 0, 0, 0, 0, 2,    0,   3,    1,   0},
          { 0, 0, 0, 0, 0,  0,  2,  2, 0, 0, 0, 0, 2,   -4,   4,    2,   2},
          { 0, 0, 0, 0, 0,  0,  3,  0, 1, 0, 0, 0, 2,   -5, -11,   -5,   2},
          { 0, 0, 0, 0, 0, -3,  8,  0, 0, 0, 0, 0, 2,    0,   4,    2,   0},
          { 0, 0, 0, 0, 0, -5,  5,  0, 0, 0, 0, 0, 1,    4,  17,    9,  -2},
          { 0, 0, 0, 0, 0,  5, -5,  0, 0, 0, 0, 0, 0,   59,   0,    0,   0},

       /* 561-570 */
          { 0, 0, 0, 0, 0,  5, -5,  0, 0, 0, 0, 0, 1,    0,  -4,   -2,   0},
          { 0, 0, 0, 0, 0,  5, -5,  0, 0, 0, 0, 0, 2,   -8,   0,    0,   4},
          { 0, 0, 0, 0, 0,  2,  0,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
          { 0, 0, 0, 0, 0,  2,  0,  0, 0, 0, 0, 0, 1,    4, -15,   -8,  -2},
          { 0, 0, 0, 0, 0,  2,  0,  0, 0, 0, 0, 0, 2,  370,  -8,    0,-160},
          { 0, 0, 0, 0, 0,  0,  7, -7, 0, 0, 0, 0, 2,    0,   0,   -3,   0},
          { 0, 0, 0, 0, 0,  0,  7, -7, 0, 0, 0, 0, 2,    0,   3,    1,   0},
          { 0, 0, 0, 0, 0,  0,  6, -5, 0, 0, 0, 0, 2,   -6,   3,    1,   3},
          { 0, 0, 0, 0, 0,  7, -8,  0, 0, 0, 0, 0, 0,    0,   6,    0,   0},
          { 0, 0, 0, 0, 0,  0,  5, -3, 0, 0, 0, 0, 2,  -10,   0,    0,   4},

       /* 571-580 */
          { 0, 0, 0, 0, 0,  4, -3,  0, 0, 0, 0, 0, 2,    0,   9,    4,   0},
          { 0, 0, 0, 0, 0,  1,  2,  0, 0, 0, 0, 0, 2,    4,  17,    7,  -2},
          { 0, 0, 0, 0, 0, -9, 11,  0, 0, 0, 0, 0, 2,   34,   0,    0, -15},
          { 0, 0, 0, 0, 0, -9, 11,  0, 0, 0, 0, 0, 1,    0,   5,    3,   0},
          { 0, 0, 0, 0, 0,  0,  4,  0,-4, 0, 0, 0, 2,   -5,   0,    0,   2},
          { 0, 0, 0, 0, 0,  0,  4,  0,-3, 0, 0, 0, 2,  -37,  -7,   -3,  16},
          { 0, 0, 0, 0, 0, -6,  6,  0, 0, 0, 0, 0, 1,    3,  13,    7,  -2},
          { 0, 0, 0, 0, 0,  6, -6,  0, 0, 0, 0, 0, 0,   40,   0,    0,   0},
          { 0, 0, 0, 0, 0,  6, -6,  0, 0, 0, 0, 0, 1,    0,  -3,   -2,   0},
          { 0, 0, 0, 0, 0,  0,  4,  0,-2, 0, 0, 0, 2, -184,  -3,   -1,  80},

       /* 581-590 */
          { 0, 0, 0, 0, 0,  0,  6, -4, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
          { 0, 0, 0, 0, 0,  3, -1,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
          { 0, 0, 0, 0, 0,  3, -1,  0, 0, 0, 0, 0, 1,    0, -10,   -6,  -1},
          { 0, 0, 0, 0, 0,  3, -1,  0, 0, 0, 0, 0, 2,   31,  -6,    0, -13},
          { 0, 0, 0, 0, 0,  0,  4,  0,-1, 0, 0, 0, 2,   -3, -32,  -14,   1},
          { 0, 0, 0, 0, 0,  0,  4,  0, 0,-2, 0, 0, 2,   -7,   0,    0,   3},
          { 0, 0, 0, 0, 0,  0,  5, -2, 0, 0, 0, 0, 2,    0,  -8,   -4,   0},
          { 0, 0, 0, 0, 0,  0,  4,  0, 0, 0, 0, 0, 0,    3,  -4,    0,   0},
          { 0, 0, 0, 0, 0,  8, -9,  0, 0, 0, 0, 0, 0,    0,   4,    0,   0},
          { 0, 0, 0, 0, 0,  5, -4,  0, 0, 0, 0, 0, 2,    0,   3,    1,   0},

       /* 591-600 */
          { 0, 0, 0, 0, 0,  2,  1,  0, 0, 0, 0, 0, 2,   19, -23,  -10,   2},
          { 0, 0, 0, 0, 0,  2,  1,  0, 0, 0, 0, 0, 1,    0,   0,    0, -10},
          { 0, 0, 0, 0, 0,  2,  1,  0, 0, 0, 0, 0, 1,    0,   3,    2,   0},
          { 0, 0, 0, 0, 0, -7,  7,  0, 0, 0, 0, 0, 1,    0,   9,    5,  -1},
          { 0, 0, 0, 0, 0,  7, -7,  0, 0, 0, 0, 0, 0,   28,   0,    0,   0},
          { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 1,    0,  -7,   -4,   0},
          { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 2,    8,  -4,    0,  -4},
          { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 0,    0,   0,   -2,   0},
          { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 0,    0,   3,    0,   0},
          { 0, 0, 0, 0, 0,  0,  5,  0,-4, 0, 0, 0, 2,   -3,   0,    0,   1},

       /* 601-610 */
          { 0, 0, 0, 0, 0,  0,  5,  0,-3, 0, 0, 0, 2,   -9,   0,    1,   4},
          { 0, 0, 0, 0, 0,  0,  5,  0,-2, 0, 0, 0, 2,    3,  12,    5,  -1},
          { 0, 0, 0, 0, 0,  3,  0,  0, 0, 0, 0, 0, 2,   17,  -3,   -1,   0},
          { 0, 0, 0, 0, 0, -8,  8,  0, 0, 0, 0, 0, 1,    0,   7,    4,   0},
          { 0, 0, 0, 0, 0,  8, -8,  0, 0, 0, 0, 0, 0,   19,   0,    0,   0},
          { 0, 0, 0, 0, 0,  5, -3,  0, 0, 0, 0, 0, 1,    0,  -5,   -3,   0},
          { 0, 0, 0, 0, 0,  5, -3,  0, 0, 0, 0, 0, 2,   14,  -3,    0,  -1},
          { 0, 0, 0, 0, 0, -9,  9,  0, 0, 0, 0, 0, 1,    0,   0,   -1,   0},
          { 0, 0, 0, 0, 0, -9,  9,  0, 0, 0, 0, 0, 1,    0,   0,    0,  -5},
          { 0, 0, 0, 0, 0, -9,  9,  0, 0, 0, 0, 0, 1,    0,   5,    3,   0},

       /* 611-620 */
          { 0, 0, 0, 0, 0,  9, -9,  0, 0, 0, 0, 0, 0,   13,   0,    0,   0},
          { 0, 0, 0, 0, 0,  6, -4,  0, 0, 0, 0, 0, 1,    0,  -3,   -2,   0},
          { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 2,    2,   9,    4,   3},
          { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 0,    0,   0,    0,  -4},
          { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 0,    8,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 1,    0,   4,    2,   0},
          { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 2,    6,   0,    0,  -3},
          { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 0,    6,   0,    0,   0},
          { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 1,    0,   3,    1,   0},
          { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 2,    5,   0,    0,  -2},

       /* 621-630 */
          { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
          { 1, 0,-2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   0},
          { 1, 0,-2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    6,   0,    0,   0},
          { 1, 0,-2, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    7,   0,    0,   0},
          { 1, 0,-2, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
          {-1, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,    4,   0,    0,   0},
          {-1, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,    6,   0,    0,   0},
          {-1, 0, 2, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -4,    0,   0},
          { 1, 0,-2, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -4,    0,   0},
          {-2, 0, 2, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    5,   0,    0,   0},

       /* 631-640 */
          {-1, 0, 0, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   -3,   0,    0,   0},
          {-1, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    4,   0,    0,   0},
          {-1, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
          {-1, 0, 2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    4,   0,    0,   0},
          { 1,-1, 1, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,   3,    0,   0},
          {-1, 0, 2, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   13,   0,    0,   0},
          {-2, 0, 0, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   21,  11,    0,   0},
          { 1, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -5,    0,   0},
          {-1, 1,-1, 1, 0,  0, -1,  0, 0, 0, 0, 0, 0,    0,  -5,   -2,   0},
          { 1, 1,-1, 1, 0,  0, -1,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},

       /* 641-650 */
          {-1, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -5,    0,   0},
          {-1, 0, 2, 1, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   2},
          { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,   20,  10,    0,   0},
          {-1, 0, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,  -34,   0,    0,   0},
          {-1, 0, 2, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,  -19,   0,    0,   0},
          { 1, 0,-2, 1, 0,  0, -2,  0, 2, 0, 0, 0, 0,    3,   0,    0,  -2},
          { 1, 2,-2, 2, 0, -3,  3,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
          { 1, 2,-2, 2, 0,  0, -2,  0, 2, 0, 0, 0, 0,   -6,   0,    0,   3},
          { 1, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
          { 1, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    3,   0,    0,   0},

       /* 651-660 */
          { 0, 0,-2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    3,   0,    0,   0},
          { 0, 0,-2, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    4,   0,    0,   0},
          { 0, 2, 0, 2, 0, -2,  2,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
          { 0, 2, 0, 2, 0,  0, -1,  0, 1, 0, 0, 0, 0,    6,   0,    0,  -3},
          { 0, 2, 0, 2, 0, -1,  1,  0, 0, 0, 0, 0, 0,   -8,   0,    0,   3},
          { 0, 2, 0, 2, 0, -2,  3,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
          { 0, 0, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   0},
          { 0, 1, 1, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -3,   -2,   0},
          { 1, 2, 0, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,  126, -63,  -27, -55},
          {-1, 2, 0, 2, 0, 10, -3,  0, 0, 0, 0, 0, 0,   -5,   0,    1,   2},

       /* 661-670 */
          { 0, 1, 1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,   -3,  28,   15,   2},
          { 1, 2, 0, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,    5,   0,    1,  -2},
          { 0, 2, 0, 2, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,   9,    4,   1},
          { 0, 2, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,   9,    4,  -1},
          {-1, 2, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0, -126, -63,  -27,  55},
          { 2, 2,-2, 2, 0,  0, -2,  0, 3, 0, 0, 0, 0,    3,   0,    0,  -1},
          { 1, 2, 0, 1, 0,  0, -2,  0, 3, 0, 0, 0, 0,   21, -11,   -6, -11},
          { 0, 1, 1, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
          {-1, 2, 0, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,  -21, -11,   -6,  11},
          {-2, 2, 2, 2, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   1},

       /* 671-680 */
          { 0, 2, 0, 2, 0,  2, -3,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
          { 0, 2, 0, 2, 0,  1, -1,  0, 0, 0, 0, 0, 0,    8,   0,    0,  -4},
          { 0, 2, 0, 2, 0,  0,  1,  0,-1, 0, 0, 0, 0,   -6,   0,    0,   3},
          { 0, 2, 0, 2, 0,  2, -2,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
          {-1, 2, 2, 2, 0,  0, -1,  0, 1, 0, 0, 0, 0,    3,   0,    0,  -1},
          { 1, 2, 0, 2, 0, -1,  1,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
          {-1, 2, 2, 2, 0,  0,  2,  0,-3, 0, 0, 0, 0,   -5,   0,    0,   2},
          { 2, 2, 0, 2, 0,  0,  2,  0,-3, 0, 0, 0, 0,   24, -12,   -5, -11},
          { 1, 2, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,   3,    1,   0},
          { 1, 2, 0, 2, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,   3,    1,   0},

       /* 681-687 */
          { 1, 1, 1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,   3,    2,   0},
          { 0, 2, 0, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,  -24, -12,   -5,  10},
          { 2, 2, 0, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    4,   0,   -1,  -2},
          {-1, 2, 2, 2, 0,  0,  2,  0,-2, 0, 0, 0, 0,   13,   0,    0,  -6},
          {-1, 2, 2, 2, 0,  3, -3,  0, 0, 0, 0, 0, 0,    7,   0,    0,  -3},
          { 1, 2, 0, 2, 0,  1, -1,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
          { 0, 2, 2, 2, 0,  0,  2,  0,-2, 0, 0, 0, 0,    3,   0,    0,  -1}
       };

    /* Number of terms in the planetary nutation model */
       const int NPL = (int) (sizeof xpl / sizeof xpl[0]);

    /*--------------------------------------------------------------------*/

    /* Interval between fundamental date J2000.0 and given date (JC). */
       t = ((date1 -JD_J2000) + date2) / JC;

    /* ------------------- */
    /* LUNI-SOLAR NUTATION */
    /* ------------------- */

    /* Fundamental (Delaunay) arguments */

    /* Mean anomaly of the Moon (IERS 2003). */
       el = iauFal03(t);

    /* Mean anomaly of the Sun (MHB2000). */
       elp = fmod(1287104.79305  +
                t * (129596581.0481  +
                t * (-0.5532  +
                t * (0.000136  +
                t * (-0.00001149)))), TURNAS) * AS_TO_RAD;

    /* Mean longitude of the Moon minus that of the ascending node */
    /* (IERS 2003. */
       f = iauFaf03(t);

    /* Mean elongation of the Moon from the Sun (MHB2000). */
       d = fmod(1072260.70369  +
              t * (1602961601.2090  +
              t * (-6.3706  +
              t * (0.006593  +
              t * (-0.00003169)))), TURNAS) * AS_TO_RAD;

    /* Mean longitude of the ascending node of the Moon (IERS 2003). */
       om = iauFaom03(t);

    /* Initialize the nutation values. */
       dp = 0.0;
       de = 0.0;

    /* Summation of luni-solar nutation series (in reverse order). */
       for (i = NLS-1; i >= 0; i--) {

       /* Argument and functions. */
          arg = fmod((double)xls[i].nl  * el +
                     (double)xls[i].nlp * elp +
                     (double)xls[i].nf  * f +
                     (double)xls[i].nd  * d +
                     (double)xls[i].nom * om, TWO_PI);
          sarg = std::sin(arg);
          carg = std::cos(arg);

       /* Term. */
          dp += (xls[i].sp + xls[i].spt * t) * sarg + xls[i].cp * carg;
          de += (xls[i].ce + xls[i].cet * t) * carg + xls[i].se * sarg;
       }

    /* Convert from 0.1 microarcsec units to radians. */
       dpsils = dp * U2R;
       depsls = de * U2R;

    /* ------------------ */
    /* PLANETARY NUTATION */
    /* ------------------ */

    /* n.b.  The MHB2000 code computes the luni-solar and planetary nutation */
    /* in different functions, using slightly different Delaunay */
    /* arguments in the two cases.  This behaviour is faithfully */
    /* reproduced here.  Use of the IERS 2003 expressions for both */
    /* cases leads to negligible changes, well below */
    /* 0.1 microarcsecond. */

    /* Mean anomaly of the Moon (MHB2000). */
       al = fmod(2.35555598 + 8328.6914269554 * t, TWO_PI);

    /* Mean longitude of the Moon minus that of the ascending node */
    /*(MHB2000). */
       af = fmod(1.627905234 + 8433.466158131 * t, TWO_PI);

    /* Mean elongation of the Moon from the Sun (MHB2000). */
       ad = fmod(5.198466741 + 7771.3771468121 * t, TWO_PI);

    /* Mean longitude of the ascending node of the Moon (MHB2000). */
       aom = fmod(2.18243920 - 33.757045 * t, TWO_PI);

    /* General accumulated precession in longitude (IERS 2003). */
       apa = iauFapa03(t);

    /* Planetary longitudes, Mercury through Uranus (IERS 2003). */
       alme = iauFame03(t);
       alve = iauFave03(t);
       alea = iauFae03(t);
       alma = iauFama03(t);
       alju = iauFaju03(t);
       alsa = iauFasa03(t);
       alur = iauFaur03(t);

    /* Neptune longitude (MHB2000). */
       alne = fmod(5.321159000 + 3.8127774000 * t, TWO_PI);

    /* Initialize the nutation values. */
       dp = 0.0;
       de = 0.0;

    /* Summation of planetary nutation series (in reverse order). */
       for (i = NPL-1; i >= 0; i--) {

       /* Argument and functions. */
          arg = fmod((double)xpl[i].nl  * al   +
                     (double)xpl[i].nf  * af   +
                     (double)xpl[i].nd  * ad   +
                     (double)xpl[i].nom * aom  +
                     (double)xpl[i].nme * alme +
                     (double)xpl[i].nve * alve +
                     (double)xpl[i].nea * alea +
                     (double)xpl[i].nma * alma +
                     (double)xpl[i].nju * alju +
                     (double)xpl[i].nsa * alsa +
                     (double)xpl[i].nur * alur +
                     (double)xpl[i].nne * alne +
                     (double)xpl[i].npa * apa, TWO_PI);
          sarg = std::sin(arg);
          carg = std::cos(arg);

       /* Term. */
          dp += (double)xpl[i].sp * sarg + (double)xpl[i].cp * carg;
          de += (double)xpl[i].se * sarg + (double)xpl[i].ce * carg;

       }

    /* Convert from 0.1 microarcsec units to radians. */
       dpsipl = dp * U2R;
       depspl = de * U2R;

    /* ------- */
    /* RESULTS */
    /* ------- */

    /* Add luni-solar and planetary components. */
       *dpsi = dpsils + dpsipl;
       *deps = depsls + depspl;

       return;
    }




    void iauNut06a(double date1, double date2, double *dpsi, double *deps)
    {
       double t, fj2, dp, de;


    /* Interval between fundamental date J2000.0 and given date (JC). */
       t = ((date1 - JD_J2000) + date2) / JC;

    /* Factor correcting for secular variation of J2. */
       fj2 = -2.7774e-6 * t;

    /* Obtain IAU 2000A nutation. */
       iauNut00a(date1, date2, &dp, &de);

    /* Apply P03 adjustments (Wallace & Capitaine, 2006, Eqs.5). */
       *dpsi = dp + dp * (0.4697e-6 + fj2);
       *deps = de + de * fj2;

       return;
    }



    double iauObl06(double date1, double date2)
    {
       double t, eps0;


    /* Interval between fundamental date J2000.0 and given date (JC). */
       t = ((date1 - JD_J2000) + date2) / JC;

    /* Mean obliquity. */
       eps0 = (84381.406     +
              (-46.836769    +
              ( -0.0001831   +
              (  0.00200340  +
              ( -0.000000576 +
              ( -0.0000000434) * t) * t) * t) * t) * t) * AS_TO_RAD;

       return eps0;
    }



    void iauPfw06(double date1, double date2,
                  double *gamb, double *phib, double *psib, double *epsa)
    {
       double t;


    /* Interval between fundamental date J2000.0 and given date (JC). */
       t = ((date1 - JD_J2000) + date2) / JC;

    /* P03 bias+precession angles. */
       *gamb = (    -0.052928     +
               (    10.556378     +
               (     0.4932044    +
               (    -0.00031238   +
               (    -0.000002788  +
               (     0.0000000260 )
               * t) * t) * t) * t) * t) * AS_TO_RAD;
       *phib = ( 84381.412819     +
               (   -46.811016     +
               (     0.0511268    +
               (     0.00053289   +
               (    -0.000000440  +
               (    -0.0000000176 )
               * t) * t) * t) * t) * t) * AS_TO_RAD;
       *psib = (    -0.041775     +
               (  5038.481484     +
               (     1.5584175    +
               (    -0.00018522   +
               (    -0.000026452  +
               (    -0.0000000148 )
               * t) * t) * t) * t) * t) * AS_TO_RAD;
       *epsa =  iauObl06(date1, date2);

       return;
    }



    void iauFw2m(double gamb, double phib, double psi, double eps,
                 Matrix<double>& r)
    {
    /* Construct the matrix. */
        r.resize(3,3,0.0);
        r(0,0) = 1.0; r(1,1) = 1.0; r(2,2) = 1.0;

        iauRz(gamb, r);
        iauRx(phib, r);
        iauRz(-psi, r);
        iauRx(-eps, r);

        return;
    }



    void iauPn06(double date1, double date2, double dpsi, double deps,
                 double *epsa,
                 Matrix<double>& rb, Matrix<double>& rp, Matrix<double>& rbp,
                 Matrix<double>& rn, Matrix<double>& rbpn)
    {
       double gamb, phib, psib, eps;
       Matrix<double> r1(3,3,0.0), r2(3,3,0.0), rt(3,3,0.0);


    /* Bias-precession Fukushima-Williams angles of J2000.0 = frame bias. */
       iauPfw06(JD_TO_MJD, MJD_J2000, &gamb, &phib, &psib, &eps);

    /* B matrix. */
       iauFw2m(gamb, phib, psib, eps, r1);
       rb = r1;

    /* Bias-precession Fukushima-Williams angles of date. */
       iauPfw06(date1, date2, &gamb, &phib, &psib, &eps);

    /* Bias-precession matrix. */
       iauFw2m(gamb, phib, psib, eps, r2);
       rbp = r2;

    /* Solve for precession matrix. */
       rt = transpose(r1);
       rp = r2 * rt;

    /* Equinox-based bias-precession-nutation matrix. */
       iauFw2m(gamb, phib, psib + dpsi, eps + deps, r1);
       rbpn = r1;

    /* Solve for nutation matrix. */
       rt = transpose(r2);
       rn = r1 * rt;

    /* Obliquity, mean of date. */
       *epsa = eps;

       return;
    }


    void iauPn06a(double date1, double date2,
                  double *dpsi, double *deps, double *epsa,
                  Matrix<double>& rb, Matrix<double>& rp, Matrix<double>& rbp,
                  Matrix<double>& rn, Matrix<double>& rbpn)
    {
    /* Nutation. */
       iauNut06a(date1, date2, dpsi, deps);

    /* Remaining results. */
       iauPn06(date1, date2, *dpsi, *deps, epsa, rb, rp, rbp, rn, rbpn);

       return;
    }


    void iauBi00(double *dpsibi, double *depsbi, double *dra)
    {
    /* The frame bias corrections in longitude and obliquity */
       const double DPBIAS = -0.041775  * AS_TO_RAD,
                    DEBIAS = -0.0068192 * AS_TO_RAD;

    /* The ICRS RA of the J2000.0 equinox (Chapront et al., 2002) */
       const double DRA0 = -0.0146 * AS_TO_RAD;


    /* Return the results (which are fixed). */
       *dpsibi = DPBIAS;
       *depsbi = DEBIAS;
       *dra = DRA0;

       return;
    }


    void iauP06e(double date1, double date2,
                 double *eps0, double *psia, double *oma, double *bpa,
                 double *bqa, double *pia, double *bpia,
                 double *epsa, double *chia, double *za, double *zetaa,
                 double *thetaa, double *pa,
                 double *gam, double *phi, double *psi)
    {
       double t;


    /* Interval between fundamental date J2000.0 and given date (JC). */
       t = ((date1 - JD_J2000) + date2) / JC;

    /* Obliquity at J2000.0. */

       *eps0 = 84381.406 * AS_TO_RAD;

    /* Luni-solar precession. */

       *psia = ( 5038.481507     +
               (   -1.0790069    +
               (   -0.00114045   +
               (    0.000132851  +
               (   -0.0000000951 )
               * t) * t) * t) * t) * t * AS_TO_RAD;

    /* Inclination of mean equator with respect to the J2000.0 ecliptic. */

       *oma = *eps0 + ( -0.025754     +
                      (  0.0512623    +
                      ( -0.00772503   +
                      ( -0.000000467  +
                      (  0.0000003337 )
                      * t) * t) * t) * t) * t * AS_TO_RAD;

    /* Ecliptic pole x, J2000.0 ecliptic triad. */

       *bpa = (  4.199094     +
              (  0.1939873    +
              ( -0.00022466   +
              ( -0.000000912  +
              (  0.0000000120 )
              * t) * t) * t) * t) * t * AS_TO_RAD;

    /* Ecliptic pole -y, J2000.0 ecliptic triad. */

       *bqa = ( -46.811015     +
              (   0.0510283    +
              (   0.00052413   +
              (  -0.000000646  +
              (  -0.0000000172 )
              * t) * t) * t) * t) * t * AS_TO_RAD;

    /* Angle between moving and J2000.0 ecliptics. */

       *pia = ( 46.998973     +
              ( -0.0334926    +
              ( -0.00012559   +
              (  0.000000113  +
              ( -0.0000000022 )
              * t) * t) * t) * t) * t * AS_TO_RAD;

    /* Longitude of ascending node of the moving ecliptic. */

       *bpia = ( 629546.7936      +
               (   -867.95758     +
               (      0.157992    +
               (     -0.0005371   +
               (     -0.00004797  +
               (      0.000000072 )
               * t) * t) * t) * t) * t) * AS_TO_RAD;

    /* Mean obliquity of the ecliptic. */

       *epsa = iauObl06(date1, date2);

    /* Planetary precession. */

       *chia = ( 10.556403     +
               ( -2.3814292    +
               ( -0.00121197   +
               (  0.000170663  +
               ( -0.0000000560 )
               * t) * t) * t) * t) * t * AS_TO_RAD;

    /* Equatorial precession: minus the third of the 323 Euler angles. */

       *za = (   -2.650545     +
             ( 2306.077181     +
             (    1.0927348    +
             (    0.01826837   +
             (   -0.000028596  +
             (   -0.0000002904 )
             * t) * t) * t) * t) * t) * AS_TO_RAD;

    /* Equatorial precession: minus the first of the 323 Euler angles. */

       *zetaa = (    2.650545     +
                ( 2306.083227     +
                (    0.2988499    +
                (    0.01801828   +
                (   -0.000005971  +
                (   -0.0000003173 )
                * t) * t) * t) * t) * t) * AS_TO_RAD;

    /* Equatorial precession: second of the 323 Euler angles. */

       *thetaa = ( 2004.191903     +
                 (   -0.4294934    +
                 (   -0.04182264   +
                 (   -0.000007089  +
                 (   -0.0000001274 )
                 * t) * t) * t) * t) * t * AS_TO_RAD;

    /* General precession. */

       *pa = ( 5028.796195     +
             (    1.1054348    +
             (    0.00007964   +
             (   -0.000023857  +
             (    0.0000000383 )
             * t) * t) * t) * t) * t * AS_TO_RAD;

    /* Fukushima-Williams angles for precession. */

       *gam = ( 10.556403     +
              (  0.4932044    +
              ( -0.00031238   +
              ( -0.000002788  +
              (  0.0000000260 )
              * t) * t) * t) * t) * t * AS_TO_RAD;

       *phi = *eps0 + ( -46.811015     +
                      (   0.0511269    +
                      (   0.00053289   +
                      (  -0.000000440  +
                      (  -0.0000000176 )
                      * t) * t) * t) * t) * t * AS_TO_RAD;

       *psi = ( 5038.481507     +
              (    1.5584176    +
              (   -0.00018522   +
              (   -0.000026452  +
              (   -0.0000000148 )
              * t) * t) * t) * t) * t * AS_TO_RAD;

       return;
    }


    void iauNumat(double epsa, double dpsi, double deps, Matrix<double>& rmatn)
    {
    /* Build the rotation matrix. */

        rmatn.resize(3,3,0.0);
        rmatn(0,0) = 1.0; rmatn(1,1) = 1.0; rmatn(2,2) = 1.0;

        iauRx(epsa, rmatn);
        iauRz(-dpsi, rmatn);
        iauRx(-(epsa + deps), rmatn);

        return;
    }


    void iauNum06a(double date1, double date2, Matrix<double>& rmatn)
    {
       double eps, dp, de;


    /* Mean obliquity. */
       eps = iauObl06(date1, date2);

    /* Nutation components. */
       iauNut06a(date1, date2, &dp, &de);

    /* Nutation matrix. */
       iauNumat(eps, dp, de, rmatn);

       return;
    }


    void iauPnm06a(double date1, double date2, Matrix<double>& rnpb)
    {
       double gamb, phib, psib, epsa, dp, de;


    /* Fukushima-Williams angles for frame bias and precession. */
       iauPfw06(date1, date2, &gamb, &phib, &psib, &epsa);

    /* Nutation components. */
       iauNut06a(date1, date2, &dp, &de);

    /* Equinox based nutation x precession x bias matrix. */
       iauFw2m(gamb, phib, psib + dp, epsa + de, rnpb);

       return;
    }


    void iauBpn2xy(Matrix<double> rbpn, double *x, double *y)
    {
    /* Extract the X,Y coordinates. */
       *x = rbpn(2,0);
       *y = rbpn(2,1);

       return;
    }


    double iauS06(double date1, double date2, double x, double y)
    {
    /* Time since J2000.0, in Julian centuries */
       double t;

    /* Miscellaneous */
       int i, j;
       double a, w0, w1, w2, w3, w4, w5;

    /* Fundamental arguments */
       double fa[8];

    /* Returned value */
       double s;

    /* --------------------- */
    /* The series for s+XY/2 */
    /* --------------------- */

       typedef struct {
          int nfa[8];      /* coefficients of l,l',F,D,Om,LVe,LE,pA */
          double s, c;     /* sine and cosine coefficients */
       } TERM;

    /* Polynomial coefficients */
       static const double sp[] = {

       /* 1-6 */
              94.00e-6,
            3808.65e-6,
            -122.68e-6,
          -72574.11e-6,
              27.98e-6,
              15.62e-6
       };

    /* Terms of order t^0 */
       static const TERM s0[] = {

       /* 1-10 */
          {{ 0,  0,  0,  0,  1,  0,  0,  0}, -2640.73e-6,   0.39e-6 },
          {{ 0,  0,  0,  0,  2,  0,  0,  0},   -63.53e-6,   0.02e-6 },
          {{ 0,  0,  2, -2,  3,  0,  0,  0},   -11.75e-6,  -0.01e-6 },
          {{ 0,  0,  2, -2,  1,  0,  0,  0},   -11.21e-6,  -0.01e-6 },
          {{ 0,  0,  2, -2,  2,  0,  0,  0},     4.57e-6,   0.00e-6 },
          {{ 0,  0,  2,  0,  3,  0,  0,  0},    -2.02e-6,   0.00e-6 },
          {{ 0,  0,  2,  0,  1,  0,  0,  0},    -1.98e-6,   0.00e-6 },
          {{ 0,  0,  0,  0,  3,  0,  0,  0},     1.72e-6,   0.00e-6 },
          {{ 0,  1,  0,  0,  1,  0,  0,  0},     1.41e-6,   0.01e-6 },
          {{ 0,  1,  0,  0, -1,  0,  0,  0},     1.26e-6,   0.01e-6 },

       /* 11-20 */
          {{ 1,  0,  0,  0, -1,  0,  0,  0},     0.63e-6,   0.00e-6 },
          {{ 1,  0,  0,  0,  1,  0,  0,  0},     0.63e-6,   0.00e-6 },
          {{ 0,  1,  2, -2,  3,  0,  0,  0},    -0.46e-6,   0.00e-6 },
          {{ 0,  1,  2, -2,  1,  0,  0,  0},    -0.45e-6,   0.00e-6 },
          {{ 0,  0,  4, -4,  4,  0,  0,  0},    -0.36e-6,   0.00e-6 },
          {{ 0,  0,  1, -1,  1, -8, 12,  0},     0.24e-6,   0.12e-6 },
          {{ 0,  0,  2,  0,  0,  0,  0,  0},    -0.32e-6,   0.00e-6 },
          {{ 0,  0,  2,  0,  2,  0,  0,  0},    -0.28e-6,   0.00e-6 },
          {{ 1,  0,  2,  0,  3,  0,  0,  0},    -0.27e-6,   0.00e-6 },
          {{ 1,  0,  2,  0,  1,  0,  0,  0},    -0.26e-6,   0.00e-6 },

       /* 21-30 */
          {{ 0,  0,  2, -2,  0,  0,  0,  0},     0.21e-6,   0.00e-6 },
          {{ 0,  1, -2,  2, -3,  0,  0,  0},    -0.19e-6,   0.00e-6 },
          {{ 0,  1, -2,  2, -1,  0,  0,  0},    -0.18e-6,   0.00e-6 },
          {{ 0,  0,  0,  0,  0,  8,-13, -1},     0.10e-6,  -0.05e-6 },
          {{ 0,  0,  0,  2,  0,  0,  0,  0},    -0.15e-6,   0.00e-6 },
          {{ 2,  0, -2,  0, -1,  0,  0,  0},     0.14e-6,   0.00e-6 },
          {{ 0,  1,  2, -2,  2,  0,  0,  0},     0.14e-6,   0.00e-6 },
          {{ 1,  0,  0, -2,  1,  0,  0,  0},    -0.14e-6,   0.00e-6 },
          {{ 1,  0,  0, -2, -1,  0,  0,  0},    -0.14e-6,   0.00e-6 },
          {{ 0,  0,  4, -2,  4,  0,  0,  0},    -0.13e-6,   0.00e-6 },

       /* 31-33 */
          {{ 0,  0,  2, -2,  4,  0,  0,  0},     0.11e-6,   0.00e-6 },
          {{ 1,  0, -2,  0, -3,  0,  0,  0},    -0.11e-6,   0.00e-6 },
          {{ 1,  0, -2,  0, -1,  0,  0,  0},    -0.11e-6,   0.00e-6 }
       };

    /* Terms of order t^1 */
       static const TERM s1[] = {

       /* 1 - 3 */
          {{ 0,  0,  0,  0,  2,  0,  0,  0},    -0.07e-6,   3.57e-6 },
          {{ 0,  0,  0,  0,  1,  0,  0,  0},     1.73e-6,  -0.03e-6 },
          {{ 0,  0,  2, -2,  3,  0,  0,  0},     0.00e-6,   0.48e-6 }
       };

    /* Terms of order t^2 */
       static const TERM s2[] = {

       /* 1-10 */
          {{ 0,  0,  0,  0,  1,  0,  0,  0},   743.52e-6,  -0.17e-6 },
          {{ 0,  0,  2, -2,  2,  0,  0,  0},    56.91e-6,   0.06e-6 },
          {{ 0,  0,  2,  0,  2,  0,  0,  0},     9.84e-6,  -0.01e-6 },
          {{ 0,  0,  0,  0,  2,  0,  0,  0},    -8.85e-6,   0.01e-6 },
          {{ 0,  1,  0,  0,  0,  0,  0,  0},    -6.38e-6,  -0.05e-6 },
          {{ 1,  0,  0,  0,  0,  0,  0,  0},    -3.07e-6,   0.00e-6 },
          {{ 0,  1,  2, -2,  2,  0,  0,  0},     2.23e-6,   0.00e-6 },
          {{ 0,  0,  2,  0,  1,  0,  0,  0},     1.67e-6,   0.00e-6 },
          {{ 1,  0,  2,  0,  2,  0,  0,  0},     1.30e-6,   0.00e-6 },
          {{ 0,  1, -2,  2, -2,  0,  0,  0},     0.93e-6,   0.00e-6 },

       /* 11-20 */
          {{ 1,  0,  0, -2,  0,  0,  0,  0},     0.68e-6,   0.00e-6 },
          {{ 0,  0,  2, -2,  1,  0,  0,  0},    -0.55e-6,   0.00e-6 },
          {{ 1,  0, -2,  0, -2,  0,  0,  0},     0.53e-6,   0.00e-6 },
          {{ 0,  0,  0,  2,  0,  0,  0,  0},    -0.27e-6,   0.00e-6 },
          {{ 1,  0,  0,  0,  1,  0,  0,  0},    -0.27e-6,   0.00e-6 },
          {{ 1,  0, -2, -2, -2,  0,  0,  0},    -0.26e-6,   0.00e-6 },
          {{ 1,  0,  0,  0, -1,  0,  0,  0},    -0.25e-6,   0.00e-6 },
          {{ 1,  0,  2,  0,  1,  0,  0,  0},     0.22e-6,   0.00e-6 },
          {{ 2,  0,  0, -2,  0,  0,  0,  0},    -0.21e-6,   0.00e-6 },
          {{ 2,  0, -2,  0, -1,  0,  0,  0},     0.20e-6,   0.00e-6 },

       /* 21-25 */
          {{ 0,  0,  2,  2,  2,  0,  0,  0},     0.17e-6,   0.00e-6 },
          {{ 2,  0,  2,  0,  2,  0,  0,  0},     0.13e-6,   0.00e-6 },
          {{ 2,  0,  0,  0,  0,  0,  0,  0},    -0.13e-6,   0.00e-6 },
          {{ 1,  0,  2, -2,  2,  0,  0,  0},    -0.12e-6,   0.00e-6 },
          {{ 0,  0,  2,  0,  0,  0,  0,  0},    -0.11e-6,   0.00e-6 }
       };

    /* Terms of order t^3 */
       static const TERM s3[] = {

       /* 1-4 */
          {{ 0,  0,  0,  0,  1,  0,  0,  0},     0.30e-6, -23.42e-6 },
          {{ 0,  0,  2, -2,  2,  0,  0,  0},    -0.03e-6,  -1.46e-6 },
          {{ 0,  0,  2,  0,  2,  0,  0,  0},    -0.01e-6,  -0.25e-6 },
          {{ 0,  0,  0,  0,  2,  0,  0,  0},     0.00e-6,   0.23e-6 }
       };

    /* Terms of order t^4 */
       static const TERM s4[] = {

       /* 1-1 */
          {{ 0,  0,  0,  0,  1,  0,  0,  0},    -0.26e-6,  -0.01e-6 }
       };

    /* Number of terms in the series */
       static const int NS0 = (int) (sizeof s0 / sizeof (TERM));
       static const int NS1 = (int) (sizeof s1 / sizeof (TERM));
       static const int NS2 = (int) (sizeof s2 / sizeof (TERM));
       static const int NS3 = (int) (sizeof s3 / sizeof (TERM));
       static const int NS4 = (int) (sizeof s4 / sizeof (TERM));

    /*--------------------------------------------------------------------*/

    /* Interval between fundamental epoch J2000.0 and current date (JC). */
       t = ((date1 - JD_J2000) + date2) / JC;

    /* Fundamental Arguments (from IERS Conventions 2003) */

    /* Mean anomaly of the Moon. */
       fa[0] = iauFal03(t);

    /* Mean anomaly of the Sun. */
       fa[1] = iauFalp03(t);

    /* Mean longitude of the Moon minus that of the ascending node. */
       fa[2] = iauFaf03(t);

    /* Mean elongation of the Moon from the Sun. */
       fa[3] = iauFad03(t);

    /* Mean longitude of the ascending node of the Moon. */
       fa[4] = iauFaom03(t);

    /* Mean longitude of Venus. */
       fa[5] = iauFave03(t);

    /* Mean longitude of Earth. */
       fa[6] = iauFae03(t);

    /* General precession in longitude. */
       fa[7] = iauFapa03(t);

    /* Evaluate s. */
       w0 = sp[0];
       w1 = sp[1];
       w2 = sp[2];
       w3 = sp[3];
       w4 = sp[4];
       w5 = sp[5];

       for (i = NS0-1; i >= 0; i--) {
       a = 0.0;
       for (j = 0; j < 8; j++) {
          a += (double)s0[i].nfa[j] * fa[j];
       }
       w0 += s0[i].s * std::sin(a) + s0[i].c * std::cos(a);
       }

       for (i = NS1-1; i >= 0; i--) {
          a = 0.0;
          for (j = 0; j < 8; j++) {
             a += (double)s1[i].nfa[j] * fa[j];
          }
          w1 += s1[i].s * std::sin(a) + s1[i].c * std::cos(a);
       }

       for (i = NS2-1; i >= 0; i--) {
          a = 0.0;
          for (j = 0; j < 8; j++) {
             a += (double)s2[i].nfa[j] * fa[j];
          }
          w2 += s2[i].s * std::sin(a) + s2[i].c * std::cos(a);
       }

       for (i = NS3-1; i >= 0; i--) {
          a = 0.0;
          for (j = 0; j < 8; j++) {
             a += (double)s3[i].nfa[j] * fa[j];
          }
          w3 += s3[i].s * std::sin(a) + s3[i].c * std::cos(a);
       }

       for (i = NS4-1; i >= 0; i--) {
          a = 0.0;
          for (j = 0; j < 8; j++) {
             a += (double)s4[i].nfa[j] * fa[j];
          }
          w4 += s4[i].s * std::sin(a) + s4[i].c * std::cos(a);
       }

       s = (w0 +
           (w1 +
           (w2 +
           (w3 +
           (w4 +
            w5 * t) * t) * t) * t) * t) * AS_TO_RAD - x*y/2.0;

       return s;
    }


    double iauS06a(double date1, double date2)
    {
       Matrix<double> rnpb;
       double x, y, s;


    /* Bias-precession-nutation-matrix, IAU 20006/2000A. */
       iauPnm06a(date1, date2, rnpb);

    /* Extract the CIP coordinates. */
       iauBpn2xy(rnpb, &x, &y);

    /* Compute the CIO locator s, given the CIP coordinates. */
       s = iauS06(date1, date2, x, y);

       return s;
    }


    double iauEra00(double dj1, double dj2)
    {
       double d1, d2, t, f, theta;


    /* Days since fundamental epoch. */
       if (dj1 < dj2) {
          d1 = dj1;
          d2 = dj2;
       } else {
          d1 = dj2;
          d2 = dj1;
       }
       t = d1 + (d2- JD_J2000);

    /* Fractional part of T (days). */
       f = fmod(d1, 1.0) + fmod(d2, 1.0);

    /* Earth rotation angle at this UT1. */
       theta = iauAnp(TWO_PI * (f + 0.7790572732640
                                + 0.00273781191135448 * t));

       return theta;
    }


    double iauEors(Matrix<double> rnpb, double s)
    {
       double x, ax, xs, ys, zs, p, q, eo;


    /* Evaluate Wallace & Capitaine (2006) expression (16). */
       x = rnpb(2,0);
       ax = x / (1.0 + rnpb(2,2));
       xs = 1.0 - ax * x;
       ys = -ax * rnpb(2,1);
       zs = -x;
       p = rnpb(0,0) * xs + rnpb(0,1) * ys + rnpb(0,2) * zs;
       q = rnpb(1,0) * xs + rnpb(1,1) * ys + rnpb(1,2) * zs;
       eo = ((p != 0) || (q != 0)) ? s - atan2(q, p) : s;

       return eo;
    }


    double iauGmst06(double uta, double utb, double tta, double ttb)
    {
       double t, gmst;

    /* TT Julian centuries since J2000.0. */
       t = ((tta - MJD_J2000) + ttb) / JC;

    /* Greenwich mean sidereal time, IAU 2006. */
       gmst = iauAnp(iauEra00(uta, utb) +
                      (    0.014506     +
                      (  4612.156534    +
                      (     1.3915817   +
                      (    -0.00000044  +
                      (    -0.000029956 +
                      (    -0.0000000368 )
              * t) * t) * t) * t) * t) * AS_TO_RAD);

       return gmst;
    }


    double iauGst06(double uta, double utb, double tta, double ttb,
                    Matrix<double> rnpb)
    {
       double x, y, s, era, eors, gst;


    /* Extract CIP coordinates. */
       iauBpn2xy(rnpb, &x, &y);

    /* The CIO locator, s. */
       s = iauS06(tta, ttb, x, y);

    /* Greenwich apparent sidereal time. */
       era = iauEra00(uta, utb);
       eors = iauEors(rnpb, s);
       gst = iauAnp(era - eors);

       return gst;
    }


    double iauGst06a(double uta, double utb, double tta, double ttb)
    {
       Matrix<double> rnpb;
       double gst;


    /* Classical nutation x precession x bias matrix, IAU 2000A. */
       iauPnm06a(tta, ttb, rnpb);

    /* Greenwich apparent sidereal time. */
       gst = iauGst06(uta, utb, tta, ttb, rnpb);

       return gst;
    }


    double iauSp00(double date1, double date2)
    {
       double t, sp;


    /* Interval between fundamental epoch J2000.0 and current date (JC). */
       t = ((date1 - JD_J2000) + date2) / JC;

    /* Approximate s'. */
       sp = -47e-6 * t * AS_TO_RAD;

       return sp;
    }


    void iauPom00(double xp, double yp, double sp, Matrix<double>& rpom)
    {

    /* Construct the matrix. */
       rpom.resize(3,3,0.0);
       rpom(0,0) = 1.0; rpom(1,1) = 1.0; rpom(2,2) = 1.0;

       iauRz(sp, rpom);
       iauRy(-xp, rpom);
       iauRx(-yp, rpom);

       return;
    }


    void DoodsonArguments(const CommonTime& UT1,
                          const CommonTime& TT,
                          double BETA[6], double FNUT[5])
    {
        MJD mjd_ut1(UT1);
        MJD mjd_tt(TT);

        // GMST, IAU 2006 model
        double THETA = iauGmst06(JD_TO_MJD,mjd_ut1.mjd, JD_TO_MJD,mjd_tt.mjd);

        // Fundamental Arguments
        //-----------------------------------------------------
        //Julian centuries since J2000
        const double  t = (mjd_tt.mjd - MJD_J2000) / JC;

        // Arcseconds in a full circle
        double TURNAS = 360.0 * 3600.0;


        // Mean anomaly of the Moon.
        double temp = fmod(           485868.249036  +
                        t * ( 1717915923.2178 +
                        t * (         31.8792 +
                        t * (          0.051635 +
                        t * (        - 0.00024470 ) ) ) ), TURNAS ) * AS_TO_RAD;

        double F1 = iauAnpm(temp);           // [-PI, +PI]

        // Mean anomaly of the Sun
        temp = fmod(         1287104.793048 +
                        t * ( 129596581.0481 +
                        t * (       - 0.5532 +
                        t * (         0.000136 +
                        t * (       - 0.00001149 ) ) ) ), TURNAS ) * AS_TO_RAD;

        double F2 = iauAnpm(temp);           // [-PI, +PI]

        // Mean longitude of the Moon minus that of the ascending node.
        temp = fmod(           335779.526232 +
                        t * ( 1739527262.8478 +
                        t * (       - 12.7512 +
                        t * (        - 0.001037 +
                        t * (          0.00000417 ) ) ) ), TURNAS ) * AS_TO_RAD;

        double F3 = iauAnpm(temp);           // [-PI, +PI]

        // Mean elongation of the Moon from the Sun.
        temp = fmod(          1072260.703692 +
                        t * ( 1602961601.2090 +
                        t * (        - 6.3706 +
                        t * (          0.006593 +
                        t * (        - 0.00003169 ) ) ) ), TURNAS ) * AS_TO_RAD;

        double F4 = iauAnpm(temp);           // [-PI, +PI]

        // Mean longitude of the ascending node of the Moon.
        temp = fmod(          450160.398036 +
                        t * ( - 6962890.5431 +
                        t * (         7.4722 +
                        t * (         0.007702 +
                        t * (       - 0.00005939 ) ) ) ), TURNAS ) * AS_TO_RAD;

        double F5 = iauAnpm(temp);           // [-PI, +PI]

        FNUT[0] = F1;
        FNUT[1] = F2;
        FNUT[2] = F3;
        FNUT[3] = F4;
        FNUT[4] = F5;

        double S = F3+F5;

        BETA[0] = THETA + PI - S;
        BETA[1] = F3 + F5;
        BETA[2] = S - F4;
        BETA[3] = S - F1;
        BETA[4] = -F5;
        BETA[5] = S - F4 - F2;

    }


    Vector<double> PMUT_OCEAN_IERS10(const CommonTime& TT)
    {

        /* Interval between fundamental epoch J2000.0 and given date (JC). */
        double t = (MJD(TT).mjd - MJD_J2000) / JC;
        double t2 = t*t;
        double t3 = t2*t;
        double t4 = t3*t;

        double chi, l, lp, f, d, om;
        double dchi, dl, dlp, df, dd, dom;

        // Arguments in the following order : chi=GMST+PI, l, lp, F, D, Omega

        chi = (67310.54841 + (876600.0*3600 + 8640184.812866)*t +
               0.093104*t2 - 6.2e-6*t3)*15.0 + 648000.0;
        chi = std::fmod(chi, TURNAS) * AS_TO_RAD;

        dchi = (876600.0*3600 + 8640184.812866 + 2*0.093104*t -
                3*6.2e-6*t2)*15.0;
        dchi = dchi * AS_TO_RAD / JC;    // rad/day

        l = -0.00024470*t4 + 0.051635*t3 + 31.8792*t2 + 1717915923.2178*t +
             485868.249036;
        l = std::fmod(l, TURNAS) * AS_TO_RAD;

        dl = -4*0.00024470*t3 + 3*0.051635*t2 + 2*31.8792*t + 1717915923.2178;
        dl = dl * AS_TO_RAD / JC;        // rad/day

        lp = -0.00001149*t4 - 0.000136*t3 - 0.5532*t2 + 129596581.0481*t +
              1287104.79305;
        lp = std::fmod(lp, TURNAS) * AS_TO_RAD;

        dlp = -4*0.00001149*t3 - 3*0.000136*t2 - 2*0.5532*t + 129596581.0481;
        dlp = dlp * AS_TO_RAD / JC;      // rad/day

        f = 0.00000417*t4 - 0.001037*t3 - 12.7512*t2 + 1739527262.8478*t +
            335779.526232;
        f = std::fmod(f, TURNAS) * AS_TO_RAD;

        df = 4*0.00000417*t3 - 3*0.001037*t2 - 2*12.7512*t + 1739527262.8478;
        df = df * AS_TO_RAD / JC;        // rad/day

        d = -0.00003169*t4 + 0.006593*t3 - 6.3706*t2 + 1602961601.2090*t +
             1072260.70369;
        d = std::fmod(d, TURNAS) * AS_TO_RAD;

        dd = -4*0.00003169*t3 + 3*0.006593*t2 - 2*6.3706*t + 1602961601.2090;
        dd = dd * AS_TO_RAD / JC;        // rad/day

        om = -0.00005939*t4 + 0.007702*t3 + 7.4722*t2 - 6962890.2665*t +
              450160.398036;
        om = std::fmod(om, TURNAS) * AS_TO_RAD;

        dom = -4*0.00005939*t3 + 3*0.007702*t2 + 2*7.4722*t - 6962890.2665;
        dom = dom * AS_TO_RAD / JC;      // rad/day

        // corrections
        Vector<double> ret(4,0.0);

        double arg, darg, sarg, carg;

        for(int i=0; i<71; i++)
        {
            arg = 0.0;
            darg = 0.0;

            arg += IERS10_PMUT_OCEAN_Coeff[i][0]*chi
                 + IERS10_PMUT_OCEAN_Coeff[i][1]*l
                 + IERS10_PMUT_OCEAN_Coeff[i][2]*lp
                 + IERS10_PMUT_OCEAN_Coeff[i][3]*f
                 + IERS10_PMUT_OCEAN_Coeff[i][4]*d
                 + IERS10_PMUT_OCEAN_Coeff[i][5]*om;
            darg += IERS10_PMUT_OCEAN_Coeff[i][0]*dchi
                  + IERS10_PMUT_OCEAN_Coeff[i][1]*dl
                  + IERS10_PMUT_OCEAN_Coeff[i][2]*dlp
                  + IERS10_PMUT_OCEAN_Coeff[i][3]*df
                  + IERS10_PMUT_OCEAN_Coeff[i][4]*dd
                  + IERS10_PMUT_OCEAN_Coeff[i][5]*dom;

            arg = std::fmod(arg, TWO_PI);
            sarg = std::sin(arg);
            carg = std::cos(arg);

            ret[0] += (IERS10_PMUT_OCEAN_Coeff[i][6]*sarg
                     + IERS10_PMUT_OCEAN_Coeff[i][7]*carg);
            ret[1] += (IERS10_PMUT_OCEAN_Coeff[i][8]*sarg
                     + IERS10_PMUT_OCEAN_Coeff[i][9]*carg);
            ret[2] += (IERS10_PMUT_OCEAN_Coeff[i][10]*sarg
                     + IERS10_PMUT_OCEAN_Coeff[i][11]*carg);
            ret[3] -= (IERS10_PMUT_OCEAN_Coeff[i][10]*carg
                     - IERS10_PMUT_OCEAN_Coeff[i][11]*sarg)*darg;
        }

        ret[0] *= 1e-6;     // correction of xp, arcsecond (")
        ret[1] *= 1e-6;     // correction of yp, arcsecond (")
        ret[2] *= 1e-6;     // correction of dUT1, second (s)
        ret[3] *= 1e-6;     // correction of LOD, second (s)

        return ret;
    }


    Vector<double> PMUT_OCEAN_Artz12(const CommonTime& TT)
    {

        /* Interval between fundamental epoch J2000.0 and given date (JC). */
        double t = (MJD(TT).mjd - MJD_J2000) / JC;
        double t2 = t*t;
        double t3 = t2*t;
        double t4 = t3*t;

        double chi, l, lp, f, d, om;
        double dchi, dl, dlp, df, dd, dom;

        // Arguments in the following order : chi=GMST+PI, l, lp, F, D, Omega

        chi = (67310.54841 + (876600.0*3600 + 8640184.812866)*t +
               0.093104*t2 - 6.2e-6*t3)*15.0 + 648000.0;
        chi = std::fmod(chi, TURNAS) * AS_TO_RAD;

        dchi = (876600.0*3600 + 8640184.812866 + 2*0.093104*t -
                3*6.2e-6*t2)*15.0;
        dchi = dchi * AS_TO_RAD / JC;    // rad/day

        l = -0.00024470*t4 + 0.051635*t3 + 31.8792*t2 + 1717915923.2178*t +
             485868.249036;
        l = std::fmod(l, TURNAS) * AS_TO_RAD;

        dl = -4*0.00024470*t3 + 3*0.051635*t2 + 2*31.8792*t + 1717915923.2178;
        dl = dl * AS_TO_RAD / JC;        // rad/day

        lp = -0.00001149*t4 - 0.000136*t3 - 0.5532*t2 + 129596581.0481*t +
              1287104.79305;
        lp = std::fmod(lp, TURNAS) * AS_TO_RAD;

        dlp = -4*0.00001149*t3 - 3*0.000136*t2 - 2*0.5532*t + 129596581.0481;
        dlp = dlp * AS_TO_RAD / JC;      // rad/day

        f = 0.00000417*t4 - 0.001037*t3 - 12.7512*t2 + 1739527262.8478*t +
            335779.526232;
        f = std::fmod(f, TURNAS) * AS_TO_RAD;

        df = 4*0.00000417*t3 - 3*0.001037*t2 - 2*12.7512*t + 1739527262.8478;
        df = df * AS_TO_RAD / JC;        // rad/day

        d = -0.00003169*t4 + 0.006593*t3 - 6.3706*t2 + 1602961601.2090*t +
             1072260.70369;
        d = std::fmod(d, TURNAS) * AS_TO_RAD;

        dd = -4*0.00003169*t3 + 3*0.006593*t2 - 2*6.3706*t + 1602961601.2090;
        dd = dd * AS_TO_RAD / JC;        // rad/day

        om = -0.00005939*t4 + 0.007702*t3 + 7.4722*t2 - 6962890.2665*t +
              450160.398036;
        om = std::fmod(om, TURNAS) * AS_TO_RAD;

        dom = -4*0.00005939*t3 + 3*0.007702*t2 + 2*7.4722*t - 6962890.2665;
        dom = dom * AS_TO_RAD / JC;      // rad/day

        // corrections
        Vector<double> ret(4,0.0);

        double arg, darg, sarg, carg;

        for(int i=0; i<124; i++)
        {
            arg = 0.0;
            darg = 0.0;

            arg += Artz12_PM_OCEAN_Coeff[i][0]*chi
                 + Artz12_PM_OCEAN_Coeff[i][1]*l
                 + Artz12_PM_OCEAN_Coeff[i][2]*lp
                 + Artz12_PM_OCEAN_Coeff[i][3]*f
                 + Artz12_PM_OCEAN_Coeff[i][4]*d
                 + Artz12_PM_OCEAN_Coeff[i][5]*om;
            darg += Artz12_PM_OCEAN_Coeff[i][0]*dchi
                  + Artz12_PM_OCEAN_Coeff[i][1]*dl
                  + Artz12_PM_OCEAN_Coeff[i][2]*dlp
                  + Artz12_PM_OCEAN_Coeff[i][3]*df
                  + Artz12_PM_OCEAN_Coeff[i][4]*dd
                  + Artz12_PM_OCEAN_Coeff[i][5]*dom;

            arg = std::fmod(arg, TWO_PI);
            sarg = std::sin(arg);
            carg = std::cos(arg);

            ret[0] += (Artz12_PM_OCEAN_Coeff[i][6]*sarg
                     + Artz12_PM_OCEAN_Coeff[i][7]*carg);
            ret[1] += (Artz12_PM_OCEAN_Coeff[i][8]*sarg
                     + Artz12_PM_OCEAN_Coeff[i][9]*carg);
        }

        for(int i=0; i<89; ++i)
        {
            arg = 0.0;
            darg = 0.0;

            arg += Artz12_UT_OCEAN_Coeff[i][0]*chi
                 + Artz12_UT_OCEAN_Coeff[i][1]*l
                 + Artz12_UT_OCEAN_Coeff[i][2]*lp
                 + Artz12_UT_OCEAN_Coeff[i][3]*f
                 + Artz12_UT_OCEAN_Coeff[i][4]*d
                 + Artz12_UT_OCEAN_Coeff[i][5]*om;
            darg += Artz12_UT_OCEAN_Coeff[i][0]*dchi
                  + Artz12_UT_OCEAN_Coeff[i][1]*dl
                  + Artz12_UT_OCEAN_Coeff[i][2]*dlp
                  + Artz12_UT_OCEAN_Coeff[i][3]*df
                  + Artz12_UT_OCEAN_Coeff[i][4]*dd
                  + Artz12_UT_OCEAN_Coeff[i][5]*dom;

            arg = std::fmod(arg, TWO_PI);
            sarg = std::sin(arg);
            carg = std::cos(arg);

            ret[2] += (Artz12_UT_OCEAN_Coeff[i][6]*sarg
                     + Artz12_UT_OCEAN_Coeff[i][7]*carg);
            ret[3] -= (Artz12_UT_OCEAN_Coeff[i][6]*carg
                     - Artz12_UT_OCEAN_Coeff[i][7]*sarg)*darg;
        }

        ret[0] *= 1e-6;     // correction of xp, arcsecond (")
        ret[1] *= 1e-6;     // correction of yp, arcsecond (")
        ret[2] *= 1e-6;     // correction of dUT1, second (s)
        ret[3] *= 1e-6;     // correction of LOD, second (s)

        return ret;
    }


    Vector<double> PM_LIBR(const CommonTime& TT)
    {
        static const struct {
            int nchi;            // coefficients of GMST+PI
            int nl,nlp,nf,nd,nom;// coefficients of l,l',F,D,Om
            double s1, c1;       // sine and cosine of xp
            double s2, c2;       // sine and cosine of yp
        } x[] = {
            { 1,-1, 0,-2, 0,-1,    -.44,   .25,   -.25,  -.44 },
            { 1,-1, 0,-2, 0,-2,   -2.31,  1.32,  -1.32, -2.31 },
            { 1, 1, 0,-2,-2,-2,    -.44,   .25,   -.25,  -.44 },
            { 1, 0, 0,-2, 0,-1,   -2.14,  1.23,  -1.23, -2.14 },
            { 1, 0, 0,-2, 0,-2,  -11.36,  6.52,  -6.52,-11.36 },
            { 1,-1, 0, 0, 0, 0,     .84,  -.48,    .48,   .84 },
            { 1, 0, 0,-2, 2,-2,   -4.76,  2.73,  -2.73, -4.76 },
            { 1, 0, 0, 0, 0, 0,   14.27, -8.19,   8.19, 14.27 },
            { 1, 0, 0, 0, 0,-1,    1.93, -1.11,   1.11,  1.93 },
            { 1, 1, 0, 0, 0, 0,     .76,  -.43,    .43,   .76 }
        };

        /* Number of terms in the series */
        const int NT = (int)(sizeof(x) / sizeof(x[0]));

        /* Interval between fundamental epoch J2000.0 and given date (JC). */
        double t = (MJD(TT).mjd - MJD_J2000)/ JC;
        double t2 = t*t;
        double t3 = t2*t;
        double t4 = t3*t;

        double chi, l, lp, f, d, om;
        // Arguments in the following order : chi=GMST+PI,l,lp,F,D,Omega

        chi = (67310.54841 + (876600.0*3600 + 8640184.812866)*t +
               0.093104*t2 - 6.2e-6*t3)*15.0 + 648000.0;
        chi = std::fmod(chi, TURNAS) * AS_TO_RAD;

        l = -0.00024470*t4 + 0.051635*t3 + 31.8792*t2 + 1717915923.2178*t +
             485868.249036;
        l = std::fmod(l, TURNAS) * AS_TO_RAD;

        lp = -0.00001149*t4 - 0.000136*t3 - 0.5532*t2 + 129596581.0481*t +
              1287104.79305;
        lp = std::fmod(lp, TURNAS) * AS_TO_RAD;

        f = 0.00000417*t4 - 0.001037*t3 - 12.7512*t2 + 1739527262.8478*t +
            335779.526232;
        f = std::fmod(f, TURNAS) * AS_TO_RAD;

        d = -0.00003169*t4 + 0.006593*t3 - 6.3706*t2 + 1602961601.2090*t +
             1072260.70369;
        d = std::fmod(d, TURNAS) * AS_TO_RAD;

        om = -0.00005939*t4 + 0.007702*t3 + 7.4722*t2 - 6962890.2665*t +
              450160.398036;
        om = std::fmod(om, TURNAS) * AS_TO_RAD;

        // corrections
        Vector<double> ret(2,0.0);

        double arg;

        for(int i=0; i<NT; i++)
        {
            arg = 0.0;
            arg += x[i].nchi * chi + x[i].nl * l + x[i].nlp * lp
                 + x[i].nf * f + x[i].nd * d + x[i].nom * om;

            arg = std::fmod(arg, TWO_PI);

            ret[0] += x[i].c1*std::cos(arg) + x[i].s1*std::sin(arg);
            ret[1] += x[i].c2*std::cos(arg) + x[i].s2*std::sin(arg);
        }

        ret[0] *= 1e-6;     // correction of xp, arcsecond (")
        ret[1] *= 1e-6;     // correction of yp, arcsecond (")

        return ret;

    }


    Vector<double> UT_LIBR(const CommonTime& TT)
    {
        static const struct {
            int nchi;            // coefficients of GMST+PI
            int nl,nlp,nf,nd,nom;// coefficients of l,l',F,D,Om
            double period;       // period of the tide
            double s1, c1;       // sine and cosine of UT1
            double s2, c2;       // sine and cosine of LOD
        } x[] = {
            { 2, -2,  0, -2,  0, -2, 0.5377239,  0.05, -0.03,  -0.3,  -0.6 },
            { 2,  0,  0, -2, -2, -2, 0.5363232,  0.06, -0.03,  -0.4,  -0.7 },
            { 2, -1,  0, -2,  0, -2, 0.5274312,  0.35, -0.20,  -2.4,  -4.1 },
            { 2,  1,  0, -2, -2, -2, 0.5260835,  0.07, -0.04,  -0.5,  -0.8 },
            { 2,  0,  0, -2,  0, -1, 0.5175645, -0.07,  0.04,   0.5,   0.8 },
            { 2,  0,  0, -2,  0, -2, 0.5175251,  1.75, -1.01, -12.2, -21.3 },
            { 2,  1,  0, -2,  0, -2, 0.5079842, -0.05,  0.03,   0.3,   0.6 },
            { 2,  0, -1, -2,  2, -2, 0.5006854,  0.04, -0.03,  -0.3,  -0.6 },
            { 2,  0,  0, -2,  2, -2, 0.5000000,  0.76, -0.44,  -5.5,  -9.6 },
            { 2,  0,  0,  0,  0,  0, 0.4986348,  0.21, -0.12,  -1.5,  -2.6 },
            { 2,  0,  0,  0,  0, -1, 0.4985982,  0.06, -0.04,  -0.4,  -0.8 }
        };

        /* Number of terms in the series */
        const int NT = (int)(sizeof(x) / sizeof(x[0]));

        /* Interval between fundamental epoch J2000.0 and given date (JC). */
        double t = (MJD(TT).mjd - MJD_J2000)/ JC;
        double t2 = t*t;
        double t3 = t2*t;
        double t4 = t3*t;

        double gmst, chi, l, lp, f, d, om;

        // Arguments in the following order : chi=GMST+PI,l,lp,F,D,Omega
        gmst = 67310.54841 + t*( (8640184.812866 + 3155760000) + t*(0.093104 + t*(-0.0000062)));
        gmst = std::fmod(gmst, DAY_TO_SEC);
        chi = gmst / (DAY_TO_SEC/TWO_PI) + PI;
        chi = std::fmod(chi, TWO_PI);

        l = -0.00024470*t4 + 0.051635*t3 + 31.8792*t2 + 1717915923.2178*t + 485868.249036;
        l = std::fmod(l, TURNAS) * AS_TO_RAD;

        lp = -0.00001149*t4 - 0.000136*t3 - 0.5532*t2 + 129596581.0481*t + 1287104.79305;
        lp = std::fmod(lp, TURNAS) * AS_TO_RAD;

        f = 0.00000417*t4 - 0.001037*t3 - 12.7512*t2 + 1739527262.8478*t + 335779.526232;
        f = std::fmod(f, TURNAS) * AS_TO_RAD;

        d = -0.00003169*t4 + 0.006593*t3 - 6.3706*t2 + 1602961601.2090*t + 1072260.70369;
        d = std::fmod(d, TURNAS) * AS_TO_RAD;

        om = -0.00005939*t4 + 0.007702*t3 + 7.4722*t2 - 6962890.2665*t + 450160.398036;
        om = std::fmod(om, TURNAS) * AS_TO_RAD;

        // corrections
        Vector<double> ret(2,0.0);

        double arg;

        for(int i=0; i<NT; i++)
        {
            arg = 0.0;
            arg = x[i].nchi*chi + x[i].nl*l + x[i].nlp*lp + x[i].nf*f
                + x[i].nd*d+x[i].nom*om;

            arg = std::fmod(arg, TWO_PI);

            ret[0] += x[i].s1 * std::sin(arg) + x[i].c1 * std::cos(arg);
            ret[1] += x[i].s2 * std::sin(arg) + x[i].c2 * std::cos(arg);
        }

        ret[0] *= 1e-6;     // correction of dUT1, second (s)
        ret[1] *= 1e-6;     // correction of LOD, second (s)

        return ret;

    }


    /* subroutines to compute the diurnal and semidiurnal variations
     * in the earth orientation from the version of Richard Ray's ocean
     * tide model that was listed in IERS Technical Note 21, July 1996.
     * This code includes the variations from 71 diurnal and semidiurnal
     * terms instead of the 8 that are listed in the report.
     *
     * Purpose: to compute the diurnal and semidiurnal variations
     *          in EOP (x,y,UT1) from ocean tides
     *
     * Coded by: Richard Eanes, UT/CSR, Feb 1997
     *
     * Input: time = Modified Julian Date
     *
     * Output: eop = (delta_x, delta_y, delta_UT1)
     *               microarcsec for x and y, microsec for UT1
     *
     * diurnal and semidiurnal orthoweights fit to the 8 constituents
     * listed in IERS Technical Note 21, July 1996 which are from the
     * paper "Diurnal and Semidiurnal Variations in the Earth's Rotation
     * Rate Induced by Ocean Tides"  by Ray,R.D., Steinberg,D.J.,
     * Chao,B.F., and Cartwright, D.E., Science, 264, pp. 830-832.
     *
     */
    Vector<double> ortho_eop (const CommonTime& TT)
    {
        Vector<double> ret(3,0.0);

        double orthow[12][3] = {
            { -6.77832, 14.86283, -1.76335 },
            {-14.86323, -6.77846,  1.03364 },
            {  0.47884,  1.45234, -0.27553 },
            { -1.45303,  0.47888,  0.34569 },
            {  0.16406, -0.42056, -0.12343 },
            {  0.42030,  0.16469, -0.10146 },
            {  0.09398, 15.30276, -0.47119 },
            { 25.73054, -4.30615,  1.28997 },
            { -4.77974,  0.07564, -0.19336 },
            {  0.28080,  2.28321,  0.02724 },
            {  1.94539, -0.45717,  0.08955 },
            { -0.73089, -1.62010,  0.04726 }
        };

        double t( MJD(TT).mjd );
        double h[12] = {0.0};

        // compute the partials of the tidal variations to the orthoweights
        cnmtx (t, h);

        // compute eop changes
        for(int k=0; k<3; k++)
        {
            ret(k) = 0.0;

            for(int j=0; j<12; j++)
            {
                ret(k) += h[j]*orthow[j][k];
            }
        }

        return ret;
    }


    /* Purpose: To compute the time dependent part of the second degree
     * diurnal and semidiurnal tidal potential from the dominant
     * spectral lines in the Cartwright-Tayler-Edden harmonic
     * decomposition
     *
     * Coded by: Richard Eanes, UT/CSR, Feb 1997
     *
     * Input: dmjd = modified julian date
     *
     * Output: h = vector of length 12 with partials of the tidal
     *         variation with respect to the orthoweights
     *
     */
    void cnmtx (double dmjd, double h[12])
    {
        const int nlines = 71;

        // the orthotide weight factors
        double sp[6][2] = {
            { 0.0298,  0.0200 },
            { 0.1408,  0.0905 },
            {+0.0805, +0.0638 },
            { 0.6002,  0.3476 },
            {+0.3025, +0.1645 },
            { 0.1517,  0.0923 }
        };

        // tidal potential model for 71 diurnal and semidiurnal lines
        double d1960(37076.5);

        static const struct {
            int nj,mj;
            double hs;
            double phase;
            double freq;
            string numarg;
        } x[] = {

        // 1 - 15
        { 2, 1,  -1.94, 9.0899831, 5.18688050, "117.655" },
        { 2, 1,  -1.25, 8.8234208, 5.38346657, "125.745" },
        { 2, 1,  -6.64,12.1189598, 5.38439079, "125.755" },
        { 2, 1,  -1.51, 1.4425700, 5.41398343, "127.545" },
        { 2, 1,  -8.02, 4.7381090, 5.41490765, "127.555" },
        { 2, 1,  -9.47, 4.4715466, 5.61149372, "135.645" },
        { 2, 1, -50.20, 7.7670857, 5.61241794, "135.655" },
        { 2, 1,  -1.80,-2.9093042, 5.64201057, "137.445" },
        { 2, 1,  -9.54, 0.3862349, 5.64293479, "137.455" },
        { 2, 1,   1.52,-3.1758666, 5.83859664, "145.535" },
        { 2, 1, -49.45, 0.1196725, 5.83952086, "145.545" },
        { 2, 1,-262.21, 3.4152116, 5.84044508, "145.555" },
        { 2, 1,   1.70,12.8946194, 5.84433381, "145.755" },
        { 2, 1,   3.43, 5.5137686, 5.87485066, "147.555" },
        { 2, 1,   1.94, 6.4441883, 6.03795537, "153.655" },

        // 16 - 30
        { 2, 1,   1.37,-4.2322016, 6.06754801, "155.445" },
        { 2, 1,   7.41,-0.9366625, 6.06847223, "155.455" },
        { 2, 1,  20.62, 8.5427453, 6.07236095, "155.655" },
        { 2, 1,   4.14,11.8382843, 6.07328517, "155.665" },
        { 2, 1,   3.94, 1.1618945, 6.10287781, "157.455" },
        { 2, 1,  -7.14, 5.9693878, 6.24878055, "162.556" },
        { 2, 1,   1.37,-1.2032249, 6.26505830, "163.545" },
        { 2, 1,-122.03, 2.0923141, 6.26598252, "163.555" },
        { 2, 1,   1.02,-1.7847596, 6.28318449, "164.554" },
        { 2, 1,   2.89, 8.0679449, 6.28318613, "164.556" },
        { 2, 1,  -7.30, 0.8953321, 6.29946388, "165.545" },
        { 2, 1, 368.78, 4.1908712, 6.30038810, "165.555" },
        { 2, 1,  50.01, 7.4864102, 6.30131232, "165.565" },
        { 2, 1,  -1.08,10.7819493, 6.30223654, "165.575" },
        { 2, 1,   2.93, 0.3137975, 6.31759007, "166.554" },

        // 31 - 45
        { 2, 1,   5.25, 6.2894282, 6.33479368, "167.555" },
        { 2, 1,   3.95, 7.2198478, 6.49789839, "173.655" },
        { 2, 1,  20.62,-0.1610030, 6.52841524, "175.455" },
        { 2, 1,   4.09, 3.1345361, 6.52933946, "175.465" },
        { 2, 1,   3.42, 2.8679737, 6.72592553, "183.555" },
        { 2, 1,   1.69,-4.5128771, 6.75644239, "185.355" },
        { 2, 1,  11.29, 4.9665307, 6.76033111, "185.555" },
        { 2, 1,   7.23, 8.2620698, 6.76125533, "185.565" },
        { 2, 1,   1.51,11.5576089, 6.76217955, "185.575" },
        { 2, 1,   2.16, 0.6146566, 6.98835826, "195.455" },
        { 2, 1,   1.38, 3.9101957, 6.98928248, "195.465" },
        { 2, 2,   1.80,20.6617051,11.45675174, "225.855" },
        { 2, 2,   4.67,13.2808543,11.48726860, "227.655" },
        { 2, 2,  16.01,16.3098310,11.68477889, "235.755" },
        { 2, 2,  19.32, 8.9289802,11.71529575, "237.555" },

        // 46 - 60
        { 2, 2,   1.30, 5.0519065,11.73249771, "238.554" },
        { 2, 2,  -1.02,15.8350306,11.89560406, "244.656" },
        { 2, 2,  -4.51, 8.6624178,11.91188181, "245.645" },
        { 2, 2, 120.99,11.9579569,11.91280603, "245.655" },
        { 2, 2,   1.13, 8.0808832,11.93000800, "246.654" },
        { 2, 2,  22.98, 4.5771061,11.94332289, "247.455" },
        { 2, 2,   1.06, 0.7000324,11.96052486, "248.454" },
        { 2, 2,  -1.90,14.9869335,12.11031632, "253.755" },
        { 2, 2,  -2.18,11.4831564,12.12363121, "254.556" },
        { 2, 2, -23.58, 4.3105437,12.13990896, "255.545" },
        { 2, 2, 631.92, 7.6060827,12.14083318, "255.555" },
        { 2, 2,   1.92, 3.7290090,12.15803515, "256.554" },
        { 2, 2,  -4.66,10.6350594,12.33834347, "263.655" },
        { 2, 2, -17.86, 3.2542086,12.36886033, "265.455" },
        { 2, 2,   4.47,12.7336164,12.37274905, "265.655" },

        // 61 - 71
        { 2, 2,   1.97,16.0291555,12.37367327, "265.665" },
        { 2, 2,  17.20,10.1602590,12.54916865, "272.556" },
        { 2, 2, 294.00, 6.2831853,12.56637061, "273.555" },
        { 2, 2,  -2.46, 2.4061116,12.58357258, "274.554" },
        { 2, 2,  -1.02, 5.0862033,12.59985198, "275.545" },
        { 2, 2,  79.96, 8.3817423,12.60077620, "275.555" },
        { 2, 2,  23.83,11.6772814,12.60170041, "275.565" },
        { 2, 2,   2.59,14.9728205,12.60262463, "275.575" },
        { 2, 2,   4.47, 4.0298682,12.82880334, "285.455" },
        { 2, 2,   1.95, 7.3254073,12.82972756, "285.465" },
        { 2, 2,   1.17, 9.1574019,13.06071921, "295.555" }

        };

        double anm[2][4][3] = {0.0};
        double bnm[2][4][3] = {0.0};
        int n, m;
        double pinm, alpha;

        // compute the time dependent potential matrix
        for(int k=0; k<3; k++)
        {
            double dt60 = (dmjd - (k-1)*2.0) - d1960;

            for(int j=1; j<=2; j++)
            {
                anm[0][j][k] = 0.0;
                bnm[0][j][k] = 0.0;
            }

            for(int j=0; j<nlines; j++)
            {
                n = x[j].nj;
                m = x[j].mj;

                pinm = ((n+m)%2)*PI/2.0;
                alpha = x[j].phase + x[j].freq*dt60 - pinm;
                alpha = fmod(alpha,TWO_PI);

                anm[n-2][m][k] += x[j].hs*std::cos(alpha);
                bnm[n-2][m][k] -= x[j].hs*std::sin(alpha);
            }
        }


        double p[3][2] = {0.0};
        double q[3][2] = {0.0};

        // orthogonalize the response terms
        for(int m=0; m<2; m++)
        {
            double ap = anm[0][m+1][2] + anm[0][m+1][0];
            double am = anm[0][m+1][2] - anm[0][m+1][0];
            double bp = bnm[0][m+1][2] + bnm[0][m+1][0];
            double bm = bnm[0][m+1][2] - bnm[0][m+1][0];

            p[0][m] = sp[0][m]*anm[0][m+1][1];
            p[1][m] = sp[1][m]*anm[0][m+1][1] - sp[2][m]*ap;
            p[2][m] = sp[3][m]*anm[0][m+1][1] - sp[4][m]*ap + sp[5][m]*bm;

            q[0][m] = sp[0][m]*bnm[0][m+1][1];
            q[1][m] = sp[1][m]*bnm[0][m+1][1] - sp[2][m]*bp;
            q[2][m] = sp[3][m]*bnm[0][m+1][1] - sp[4][m]*bp - sp[5][m]*am;

            anm[0][m+1][0] = p[0][m];
            anm[0][m+1][1] = p[1][m];
            anm[0][m+1][2] = p[2][m];

            bnm[0][m+1][0] = q[0][m];
            bnm[0][m+1][1] = q[1][m];
            bnm[0][m+1][2] = q[2][m];
        }

        // fill partials vector
        int j(0);
        for(int n=2; n<=2; n++)
        {
            for(int m=1; m<=n; m++)
            {
                for(int k=0; k<3; k++)
                {
                    h[j+0] = anm[n-2][m][k];
                    h[j+1] = bnm[n-2][m][k];

                    j += 2;
                }
            }
        }

    }

}  // End of namespace gpstk
